Java实现复数的加减乘除

众所周知,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

猜你喜欢

转载自blog.csdn.net/u014259820/article/details/79376587
今日推荐