Java中的Add和Multiply函数返回错误的结果

CHA*_*COX 2 java tostring complex-numbers

在Java中做了一个非常基本的Complex Numbers类,但是当我测试我的add和multiply函数时,我没有得到我期望的结果.我不明白什么是错的或如何解决它.

当我运行程序时,我得到以下输出:

a + b:ComplexNumber @ 1540e19d

a*b:ComplexNumber @ 677327b6

我应该得到两个复数的正确加法和乘法(遵循复数的规则)

任何帮助将非常感激!提前致谢.

这是代码:

public class ComplexNumber {

private double real;
private double imaginary;

public ComplexNumber(double r, double i) {
    real = r;
    imaginary = i;
}

public double real() {
    return real;
}

public double imaginary() {
    return imaginary;
}

public ComplexNumber add(ComplexNumber c) {
    double newr = real + c.real();
    double newi = imaginary + c.imaginary();
    return new ComplexNumber(newr, newi);
}
public ComplexNumber multiply(ComplexNumber c) {
    double newr = real*c.real() - imaginary*c.imaginary();
    double newi = real*c.imaginary() + imaginary*c.real();
    return new ComplexNumber(newr, newi);
}

 public static void main(String[] args) {

    ComplexNumber c1 = new ComplexNumber(1.0, 2.0);
    ComplexNumber c2 = new ComplexNumber(-1.0, 0.5);
    String c1plusc2 = c1.add(c2).toString();
    String c1timesc2 = c1.multiply(c2).toString();

    System.out.println("a+b :" + c1plusc2);
    System.out.println("a*b :" + c1timesc2);

    }
    }
Run Code Online (Sandbox Code Playgroud)

Moh*_*uag 6

您需要覆盖类中的toString方法ComplexNumber:

@Override
public String toString() {
    return real + " + i*" + imaginary;
}
Run Code Online (Sandbox Code Playgroud)

你的.add()&.multiply()方法返回一个ComplexNumber对象.默认情况下,

System.out.println("a*b :" + c1.multiply(c2));
Run Code Online (Sandbox Code Playgroud)

评估为

System.out.println("a*b :" + c1.multiply(c2).toString());
Run Code Online (Sandbox Code Playgroud)

toString()方法继承自Object该类(因为所有类都继承自Object).而且,由于你不覆盖在它ComplexNumber的类,你从默认的返回值ObjecttoString()方法:

ClassName@hashCodeOfTheObject
Run Code Online (Sandbox Code Playgroud)

编辑:

toString()返回一个String.更改

ComplexNumber c1plusc2 = c1.add(c2).toString();
ComplexNumber c1timesc2 = c1.multiply(c2).toString();
Run Code Online (Sandbox Code Playgroud)

String c1plusc2 = c1.add(c2).toString();
String c1timesc2 = c1.multiply(c2).toString();
Run Code Online (Sandbox Code Playgroud)

输出:

a+b :0.0 + i*2.5
a*b :-2.0 + i*-1.5
Run Code Online (Sandbox Code Playgroud)