众所周知,Java中并没有提供复数的加减乘除的方法,下面我们来自己动手写一下,并提供一个输出结果的方法。代码如下:
public class ComplexNumber {
public double resultRealPart;
public double resultImaginaryPart;
private double realPart;
private double imaginaryPart;
public ComplexNumber(double realPart, double imaginaryPart) {
this.realPart = realPart;
this.imaginaryPart = imaginaryPart;
}
public ComplexNumber() {
}
public String add(ComplexNumber complexNumber1, ComplexNumber complexNumber2) {
resultRealPart = complexNumber1.realPart + complexNumber2.realPart;
resultImaginaryPart = complexNumber1.imaginaryPart + complexNumber2.imaginaryPart;
return stitchResult(resultRealPart, resultImaginaryPart);
}
public String sub(ComplexNumber complexNumber1, ComplexNumber complexNumber2) {
resultRealPart = complexNumber1.realPart - complexNumber2.realPart;
resultImaginaryPart = complexNumber1.imaginaryPart - complexNumber2.imaginaryPart;
return stitchResult(resultRealPart, resultImaginaryPart);
}
public String multiply(ComplexNumber complexNumber1, ComplexNumber complexNumber2) {
resultRealPart = complexNumber1.realPart * complexNumber2.realPart - complexNumber1.imaginaryPart * complexNumber2.imaginaryPart;
resultImaginaryPart = complexNumber1.imaginaryPart * complexNumber2.realPart + complexNumber1.realPart * complexNumber2.imaginaryPart;
return stitchResult(resultRealPart, resultImaginaryPart);
}
public String divide(ComplexNumber complexNumber1, ComplexNumber complexNumber2) {
double denominator = complexNumber2.realPart * complexNumber2.realPart + complexNumber2.imaginaryPart * complexNumber2.imaginaryPart;
// System.out.println("分母:" + denominator);
double molecular1 = complexNumber1.realPart * complexNumber2.realPart + complexNumber1.imaginaryPart * complexNumber2.imaginaryPart;
double molecular2 = complexNumber1.realPart * complexNumber2.imaginaryPart - complexNumber1.imaginaryPart * complexNumber2.realPart;
// System.out.println("分子1:" + molecular1);
// System.out.println("分子2:" + molecular2);
resultRealPart = (double) molecular1 / denominator;
resultImaginaryPart = (double) molecular2 / denominator;
return stitchResult(resultRealPart, resultImaginaryPart);
}
//拼接结果成复数形式:a + bj
public String stitchResult(double resultRealPart, double resultImaginaryPart) {
String res = null;
if (resultRealPart == 0 && resultImaginaryPart == 0) {
res = "0.0";
}
if (resultRealPart != 0 && resultImaginaryPart == 0) {
res = resultRealPart + "";
}
if (resultRealPart == 0 && resultImaginaryPart != 0) {
res = resultImaginaryPart + "j";
}
if (resultRealPart != 0 && resultImaginaryPart != 0) {
if (resultImaginaryPart > 0) {
res = resultRealPart + " + " + resultImaginaryPart + "j";
}
else {
res = resultRealPart + " - " + (-resultImaginaryPart) + "j";
}
}
return res;
}
}
测试代码:
public class Main {
public static void main(String[] args) {
double realPart1 = 3;
double imaginaryPart1 = 1.5;
double realPart2 = 4.8;
double imaginaryPart2 = -2.0;
ComplexNumber complexNumber1 = new ComplexNumber(realPart1, imaginaryPart1);
ComplexNumber complexNumber2 = new ComplexNumber(realPart2, imaginaryPart2);
ComplexNumber complex = new ComplexNumber();
if (imaginaryPart1 > 0) {
System.out.println("complexNumber1: " + realPart1 + " + " + imaginaryPart1 + "j");
} else {
System.out.println("complexNumber1: " + realPart1 + " - " + -imaginaryPart1 + "j");
}
if (imaginaryPart2 > 0) {
System.out.println("complexNumber2: " + realPart2 + " + " + imaginaryPart2 + "j");
} else {
System.out.println("complexNumber2: " + realPart2 + " - " + -imaginaryPart2 + "j");
}
String addRes = complex.add(complexNumber1, complexNumber2);
System.out.println("addRes = " + addRes);
String subRes = complexNumber1.sub(complexNumber1, complexNumber2);
System.out.println("subRes = " + subRes);
String multiplyRes = complexNumber1.multiply(complexNumber1, complexNumber2);
System.out.println("multiplyRes = " + multiplyRes);
String divideRes = complexNumber1.divide(complexNumber1, complexNumber2);
System.out.println("divideRes = " + divideRes);
}
}
测试结果:
complexNumber1: 3.0 + 1.5j
complexNumber2: 4.8 - 2.0j
addRes = 7.8 - 0.5j
subRes = -1.7999999999999998 + 3.5j
multiplyRes = 17.4 + 1.1999999999999993j
divideRes = 0.42159763313609466 - 0.4881656804733728j