Mega Code Archive

 
Categories / Java / Development Class
 

Complex Number Demo

/* 3.0+5.0i 3.0+5.0i.getReal() = 3.0 3.0+5.0i + 2.0-2.0i = 5.0+3.0i 3.0+5.0i + 2.0-2.0i = 5.0+3.0i 3.0+5.0i * 2.0-2.0i = 16.0+4.0i -0.5+2.0i */ /** A class to test Complex Numbers.   * @author Ian F. Darwin, http://www.darwinsys.com/  * @version $Id: ComplexDemo.java,v 1.6 2004/05/13 22:28:59 ian Exp $  */ public class ComplexDemo {   /** The program */   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));   } } /** 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 $  */ 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;   } }