Java/Data Type/Complex Number

Материал из Java эксперт
Перейти к: навигация, поиск

A class to represent Complex Numbers

   <source lang="java">

/** A class to represent Complex Numbers. A Complex object is

* immutable once created; the add, subtract and multiply routines
* return newly-created Complex objects containing the results.
*
* @author Ian F. Darwin, inspired by David Flanagan.
* @version $Id: Complex.java,v 1.3 2004/05/13 22:28:59 ian Exp $
*/

public class Complex {

 /** The real part */
 private double r;
 /** The imaginary part */
 private double i;
 /** Construct a Complex */
 Complex(double rr, double ii) {
   r = rr;
   i = ii;
 }
 /** Display the current Complex as a String, for use in
  * println() and elsewhere.
  */
 public String toString() {
   StringBuffer sb = new StringBuffer().append(r);
   if (i>0)
     sb.append("+");  // else append(i) appends - sign
   return sb.append(i).append("i").toString();
 }
 /** Return just the Real part */
 public double getReal() {
   return r;
 }
 /** Return just the Real part */
 public double getImaginary() {
   return i;
 }
 /** Return the magnitude of a complex number */
 public double magnitude() {
   return Math.sqrt(r*r + i*i);
 }
 /** Add another Complex to this one
  */
 public Complex add(Complex other) {
   return add(this, other);
 }
 /** Add two Complexes
  */
 public static Complex add(Complex c1, Complex c2) {
   return new Complex(c1.r+c2.r, c1.i+c2.i);
 }
 /** Subtract another Complex from this one
  */
 public Complex subtract(Complex other) {
   return subtract(this, other);
 }
 /** Subtract two Complexes
  */
 public static Complex subtract(Complex c1, Complex c2) {
   return new Complex(c1.r-c2.r, c1.i-c2.i);
 }
 /** Multiply this Complex times another one
  */
 public Complex multiply(Complex other) {
   return multiply(this, other);
 }
 /** Multiply two Complexes
  */
 public static Complex multiply(Complex c1, Complex c2) {
   return new Complex(c1.r*c2.r - c1.i*c2.i, c1.r*c2.i + c1.i*c2.r);
 }
 /** Divide c1 by c2.
  * @author Gisbert Selke.
  */
 public static Complex divide(Complex c1, Complex c2) {
   return new Complex(
     (c1.r*c2.r+c1.i*c2.i)/(c2.r*c2.r+c2.i*c2.i),
     (c1.i*c2.r-c1.r*c2.i)/(c2.r*c2.r+c2.i*c2.i));
 }
 
 /* Compare this Complex number with another
  */
 public boolean equals(Object o) {
   if (!(o instanceof Complex))
     throw new IllegalArgumentException(
         "Complex.equals argument must be a Complex");
   Complex other = (Complex)o;
   return r == other.r && i == other.i;
 }
 
 /* Generate a hashCode; not sure how well distributed these are.
  */
 public int hashCode() {
   return (int)( r) |  (int)i;
 }
 public static void main(String[] args) {
   Complex c = new Complex(3,  5);
   Complex d = new Complex(2, -2);
   System.out.println(c);
   System.out.println(c + ".getReal() = " + c.getReal());
   System.out.println(c + " + " + d + " = " + c.add(d));
   System.out.println(c + " + " + d + " = " + Complex.add(c, d));
   System.out.println(c + " * " + d + " = " + c.multiply(d));
   System.out.println(Complex.divide(c, d));
 }

}

      </source>
   
  
 
  



This class represents complex numbers, and defines methods for performing arithmetic on complex numbers

   <source lang="java">

/*

* Copyright (c) 2004 David Flanagan.  All rights reserved.
* This code is from the book Java Examples in a Nutshell, 3nd Edition.
* It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.
* You may study, use, and modify it for any non-commercial purpose,
* including teaching and use in open-source projects.
* You may distribute it non-commercially as long as you retain this notice.
* For a commercial use license, or to purchase the book, 
* please visit http://www.davidflanagan.ru/javaexamples3.
*/

/**

* This class represents complex numbers, and defines methods for performing
* arithmetic on complex numbers.
*/

public class ComplexNumber {

 // These are the instance variables. Each ComplexNumber object holds
 // two double values, known as x and y. They are private, so they are
 // not accessible from outside this class. Instead, they are available
 // through the real() and imaginary() methods below.
 private double x, y;
 /** This is the constructor. It initializes the x and y variables */
 public ComplexNumber(double real, double imaginary) {
   this.x = real;
   this.y = imaginary;
 }
 /**
  * An accessor method. Returns the real part of the complex number. Note that
  * there is no setReal() method to set the real part. This means that the
  * ComplexNumber class is "immutable".
  */
 public double real() {
   return x;
 }
 /** An accessor method. Returns the imaginary part of the complex number */
 public double imaginary() {
   return y;
 }
 /** Compute the magnitude of a complex number */
 public double magnitude() {
   return Math.sqrt(x * x + y * y);
 }
 /**
  * This method converts a ComplexNumber to a string. This is a method of
  * Object that we override so that complex numbers can be meaningfully
  * converted to strings, and so they can conveniently be printed out with
  * System.out.println() and related methods
  */
 public String toString() {
   return "{" + x + "," + y + "}";
 }
 /**
  * This is a static class method. It takes two complex numbers, adds them, and
  * returns the result as a third number. Because it is static, there is no
  * "current instance" or "this" object. Use it like this: ComplexNumber c =
  * ComplexNumber.add(a, b);
  */
 public static ComplexNumber add(ComplexNumber a, ComplexNumber b) {
   return new ComplexNumber(a.x + b.x, a.y + b.y);
 }
 /**
  * This is a non-static instance method by the same name. It adds the
  * specified complex number to the current complex number. Use it like this:
  * ComplexNumber c = a.add(b);
  */
 public ComplexNumber add(ComplexNumber a) {
   return new ComplexNumber(this.x + a.x, this.y + a.y);
 }
 /** A static class method to multiply complex numbers */
 public static ComplexNumber multiply(ComplexNumber a, ComplexNumber b) {
   return new ComplexNumber(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
 }
 /** An instance method to multiply complex numbers */
 public ComplexNumber multiply(ComplexNumber a) {
   return new ComplexNumber(x * a.x - y * a.y, x * a.y + y * a.x);
 }

}

</source>