Question: The following code is what I have done but read file is wrong. Please help me it is due tonight. public class Complex implements Comparable

 The following code is what I have done but read file

is wrong. Please help me it is due tonight. public class Complex

The following code is what I have done but read file is wrong. Please help me it is due tonight.

public class Complex implements Comparable, Cloneable{

private double r;

private double theta;

private final double DELTA = 0.000001;

public Complex() {

this.r = 0;

this.theta = 0;

}

public Complex(double r) {

this.r = r;

this.theta = 0;

}

public Complex(double r, double theta) {

this.r = r;

this.theta = theta;

}

public Complex add(Complex c) {

double real = this.getRealPart() + c.getRealPart();

double img = this.getImaginaryPart() + c.getImaginaryPart();

Complex result = new Complex(Math.sqrt((real * real + img * img)), Math.atan(img / real));

return result;

}

public Complex subtract(Complex c) {

double real = this.getRealPart() - c.getRealPart();

double img = this.getImaginaryPart() - c.getImaginaryPart();

Complex result = new Complex(Math.sqrt((real * real + img * img)), Math.atan(img / real));

return result;

}

public Complex multiply(Complex c) {

double r = this.r * c.r;

double theta = this.theta + c.theta;

Complex result = new Complex(r, theta);

return result;

}

public Complex divide(Complex c) {

double r = this.r / c.r;

double theta = this.theta - c.theta;

Complex result = new Complex(r, theta);

return result;

}

public double abs() {

return r;

}

public double getR() {

return r;

}

public double getTheta() {

return theta;

}

public double getRealPart() {

double[] rec = this.polartorectangular(this.getR(), this.getTheta());

return rec[0];

}

public double getImaginaryPart() {

double[] rec = this.polartorectangular(this.getR(), this.getTheta());

return rec[1];

}

public boolean greaterThen(Complex c) {

if(equalTo(c)) return false;

if((Math.abs(this.getRealPart() - c.getRealPart()) > DELTA

&& Math.abs(this.getImaginaryPart() - c.getImaginaryPart()) > DELTA)

&& (this.abs() > c.abs()))

return true;

return false;

}

public boolean lessThen(Complex c) {

if(equalTo(c) || greaterThen(c)) return false;

return true;

}

public boolean equalTo(Complex c) {

if(Math.abs(Math.abs(this.getRealPart()) - Math.abs(c.getRealPart()))

&& Math.abs(this.getImaginaryPart() - c.getImaginaryPart())

return true;

return false;

}

@Override

public int compareTo(Complex c) {

if(equalTo(c)) return 0;

if(greaterThen(c)) return 1;

return -1;

}

@Override

public Complex clone() {

Complex cloneObject = new Complex(this.getR(), this.getTheta());

return cloneObject;

}

@Override

public String toString() {

if(Math.abs(getR())

return "0.0000/_0.0000";

} else {

return String.format("%.4f", getR()) + "/_" + String.format("%.4f", getTheta());

}

}

private String printBasicOperationalValue(String a, String b, String c, String operation) {

StringBuilder sb = new StringBuilder();

sb.append(a);

sb.append(operation);

sb.append(b);

sb.append(" = ");

sb.append(c);

return sb.toString() + " ";

}

private String printBasicOperationalValue(String a, String b, boolean c, String operation) {

StringBuilder sb = new StringBuilder();

sb.append(a);

sb.append(operation);

sb.append(b);

sb.append(" = ");

sb.append(c);

return sb.toString() + " ";

}

public String printAbsoluteValue() {

return "|" + this.toString() + "| = " + String.format("%.4f", this.abs()) + " ";

}

public String cloneOperation() {

Complex clonedObject = this.clone();

return "First complex number reference == clone reference is " + (this == clonedObject) + " " +

"Clone real part is " + String.format("%.4f", clonedObject.getRealPart()) + " " +

"Clone imaginary part is " + String.format("%.4f", clonedObject.getImaginaryPart()) + " ";

}

private String sortedResults(Complex[] src, int len) {

String res = "";

Complex[] dest = new Complex[len];

System.arraycopy(src, 0, dest, 0, len);

Arrays.sort(dest);

res += "Sorted Result: ";

for(Complex complex : dest) {

res += complex.toString() + " ";

}

return res;

}

public String performComplexOperation(Complex c) {

Complex[] complexes = new Complex[4];

String res = "";

int resultIndex = 0;

complexes[resultIndex] = add(c);

res += printBasicOperationalValue(this.toString(), c.toString(), complexes[resultIndex++].toString(), " + ");

complexes[resultIndex] = subtract(c);

res += printBasicOperationalValue(this.toString(), c.toString(), complexes[resultIndex++].toString(), " - ");

complexes[resultIndex] = multiply(c);

res += printBasicOperationalValue(this.toString(), c.toString(), complexes[resultIndex++].toString(), " * ");

try {

complexes[resultIndex] = divide(c);

res += printBasicOperationalValue(this.toString(), c.toString(), complexes[resultIndex++].toString(), " / ");

} catch (ArithmeticException exception) {

res += printBasicOperationalValue(this.toString(), c.toString(), "java.lang.ArithmeticException: " + exception.getMessage(), " / ");

}

res += printAbsoluteValue();

boolean greaterThenResult = greaterThen(c);

res += printBasicOperationalValue(this.toString(), c.toString(), greaterThenResult, " > ");

boolean lessThenResult = lessThen(c);

res += printBasicOperationalValue(this.toString(), c.toString(), lessThenResult, "

boolean equalResult = equalTo(c);

res += printBasicOperationalValue(this.toString(), c.toString(), equalResult, " == ");

res += cloneOperation();

res += sortedResults(complexes, resultIndex);

return res;

}

public double[] polartorectangular(double r, double theta) {

double real = r * Math.cos(theta);

double img = r * Math.sin(theta);

double[] rectangular = {real, img};

return rectangular;

}

public double[] rectangular2polar(double x, double y) {

double r = (double)Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));

double theta = (double)Math.atan2(y, x);

if(theta

theta = 2* Math.PI + theta;

}

double[] polar = {r, theta};

System.out.println(r + ", " + theta);

return polar;

}

public static void main(String[] args) throws Exception {

java.io.File file = new java.io.File("testdata.txt");

Scanner sc = new Scanner(file);

while( sc.hasNext())

{

double[] valueArr = new double[4];

valueArr[1] = valueArr[1] / 180.0 * Math.PI;

valueArr[3] = valueArr[3] / 180.0 * Math.PI;

Complex firstComplexNumber = new Complex(valueArr[0], valueArr[1]);

Complex secondComplexNumber = new Complex(valueArr[2], valueArr[3]);

String res = firstComplexNumber.performComplexOperation(secondComplexNumber);

res += "---------- ";

System.out.println(res);

}

sc.close();

}

}

1) make a copy of your Lab 3f and address ALL comments/issues (unless you got 100% on that lab). If there are ANY LI 2) modify your code from Lab 3f so that it uses polar coordinates to represent complex numbers. Specifically, replace a and b with r and theta (where r is positive and theta is in degrees) and update all methods to work with r and theta instead of a and b. Note the following: i) the single argument constructor should use r as its formal parameter. The two argument constructor should use r and theta as its formal parameters. ii) modify the toString method so it always formats r to 4 digits after the decimal followed by/_(forward slash then underscore) followed by theta to 4 digits after the decimal (e.g. 1.2333/_26.2345), except for the case where r is zero (subject to DELTA) where the output should be 0.0000/_0.0000 ili) add methods double getR) and double getTheta) (for completeness only as they aren't needed for this lab). iv) multiplication and division are simple and straight forward with polar coordinates and that should be reflected in your implementation of these methods v) addition and subtraction are more complicated with polar coordinates. Create a helper method double ] rectangular2polar(double a, double b) to aid in implementing your addition and subtraction methods (hint 1: you already have getRealPart) and getlmaginaryPart) methods; hint 2: use Math.atan2 and adjust the 0 to +180/0 to -180 range to be 0 to 360) 3) modify your main from Lab 3f to read input data from the file testdata.txt located here to test your code. The test file consists of an unknown number of rows each containing two operands (in the form r1 theta1 r2 theta2). Your code should handle bad input data (e.g. a letter where a double is expected) by catching the appropriate Exception, outputting a message like "Error: bad input on line 6: plus2.4" (for a bad input of plus2.4 found on line 6), discarding that line of input, and continuing. Your program should still output the results to the console as in Lab 3f, including the results of cloning (the only output still in rectangular coordinates) and sorting the results. Output a line with 10 dashes after outputting the results for each row of input read from the test file (including after any detected errors above). Note that the first three lines of input in the test file are the same input you ran for Lab 3f. You can use these lines to debug your code by hand checking the results against your Lab 3f results

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!