我正在用Java编写一个非常基本的复杂数字类但是当我测试我的加法和乘法函数时,我没有得到我期望的结果。我不明白什么是错的或如何解决它。
当我运行程序时,我得到以下输出:
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);
}
}
答案 0 :(得分:6)
您需要覆盖toString
类中的ComplexNumber
方法:
@Override
public String toString() {
return real + " + i*" + imaginary;
}
您的.add()
& .multiply()
方法返回ComplexNumber
个对象。默认情况下,
System.out.println("a*b :" + c1.multiply(c2));
评估为
System.out.println("a*b :" + c1.multiply(c2).toString());
toString()
方法继承自Object
类(因为所有类都继承自Object
)。由于您在ComplexNumber
课程中没有覆盖,因此您可以获得Object
toString()
方法的默认返回值:
ClassName@hashCodeOfTheObject
修改强>
toString()
返回String
。变化
ComplexNumber c1plusc2 = c1.add(c2).toString();
ComplexNumber c1timesc2 = c1.multiply(c2).toString();
到
String c1plusc2 = c1.add(c2).toString();
String c1timesc2 = c1.multiply(c2).toString();
输出:
a+b :0.0 + i*2.5
a*b :-2.0 + i*-1.5