Java tutorial
/* 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; } }