W9 Homework Assignment solution

Complete the ComplexNumber class we began in the past week's lectures, according to the UML Class diagram shown below. Note that you need to implement a new static method that computes the magnitude of a ComplexNumber (recall from you math courses that the magnitude of a complex number is simply the square root of the sum of the squares of the real and imaginary components).

Solution:

package msoe.se1011.complex;

/**
 * This class represents a Complex Number
 * @author hornick
 *
 */
public class ComplexNumber {

	/** the real component of a complex number */
	private double r;
	
	/** the imaginary component of a complex number */
	private double i;
	
	
	/**
	 * Constructor
	 * @param r the real component of the complex number
	 * @param i the imaginary component
	 */
	public ComplexNumber(double r, double i) {
		this.r = r;
		this.i = i;
	}
	
	
	/**
	 * Add a real value to this complex number, and return the complex sum
	 * @param r the real value to add to this complex number
	 * @return the sum. Note: The original complex number is not modified.
	 */
	public ComplexNumber add( double r) {
		// create a new complex number, initially equal to this ComplexNumber, that will contain the sum
		ComplexNumber temp = new ComplexNumber(this.r, this.i); 
		temp.r += r;  
		
		return temp;
	}
	
	
	/**
	 * Add a complex conjugate to this complex number, and return the complex sum
	 * @param r the real value to be added
	 * @param i the imaginary value to be added
	 * @return the sum.
	 */
	public ComplexNumber add( double r, double i) {
		// create a new complex number, initially equal to this ComplexNumber, that will contain the sum
		ComplexNumber temp = new ComplexNumber(this.r,this.i); 
		temp.i += i; 	// add the arguments	
		temp.r += r; 
		
		return temp;
	}
	
	
	/**
	 * Adds a ComplexNumber to this ComplexNumber
	 * @param x reference to the ComplexNumber to add to this ComplexNumber
	 * @return a reference to a ComplexNumber that is the sum of the ComplexNumbers added.
	 * Note: To assign the original ComplexNumber to the sum, use this approach: a = a.add(x);
	 */
	public ComplexNumber add( ComplexNumber x ) {
		ComplexNumber temp = new ComplexNumber(r,i); 
		temp.r += x.r;
		temp.i += x.i;
		
		return temp;
	}
	
	
	/**
	 * Computes the magnitude of a ComplexNumber
	 * @param x the ComplexNumber whose magnitude is to be computed
	 * @return the magnitude, computed as the square root of the sum of the squares of the real and imaginary components of the ComplexNumber
	 */
	public static double mag( ComplexNumber x ) {
		return Math.sqrt( x.r * x.r + x.i * x.i );
	}
	
	@Override //this optional annotation indicates that this method is an override of a default implementation of toString() 
	/**
	 * override of the toString method
	 * @return a String description of this ComplexNumber, in the format "(r,i)"
	 */
	public String toString() {
		return "[" + this.r + "," + this.i + "]";			
	}
	
	/**
	 * Compare this ComplexNumber to another ComplexNumber for equality
	 * @param x the ComplexNumber to compare this ComplexNumber against
	 * @return true if both the real and imaginary components of the two ComplexNumbers are exactly equal
	 */
	public boolean equals( ComplexNumber x ) {
		return( this.r == x.r && this.i == x.i );
	}
	
}