Java return 中的加法和乘法函数结果错误
Add and Multiply Functions in Java return wrong result
我在 Java 中做一个非常基本的 复数 class 但是当我测试我的加法和乘法函数时我没有得到结果我预计。我不明白哪里出了问题或如何解决。
当我 运行 程序时,我得到以下输出:
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);
}
}
您需要覆盖 ComplexNumber
class:
中的 toString
方法
@Override
public String toString() {
return real + " + i*" + imaginary;
}
您的 .add()
和 .multiply()
方法 return 一个 ComplexNumber
对象。默认情况下,
System.out.println("a*b :" + c1.multiply(c2));
计算为
System.out.println("a*b :" + c1.multiply(c2).toString());
toString()
方法继承自 Object
class(因为所有 class 都继承自 Object
)。由于您没有在 ComplexNumber
class 中 覆盖 它,您从 Object
的 toString()
方法:
ClassName@hashCodeOfTheObject
编辑:
toString()
return一个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
我在 Java 中做一个非常基本的 复数 class 但是当我测试我的加法和乘法函数时我没有得到结果我预计。我不明白哪里出了问题或如何解决。
当我 运行 程序时,我得到以下输出:
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);
}
}
您需要覆盖 ComplexNumber
class:
toString
方法
@Override
public String toString() {
return real + " + i*" + imaginary;
}
您的 .add()
和 .multiply()
方法 return 一个 ComplexNumber
对象。默认情况下,
System.out.println("a*b :" + c1.multiply(c2));
计算为
System.out.println("a*b :" + c1.multiply(c2).toString());
toString()
方法继承自 Object
class(因为所有 class 都继承自 Object
)。由于您没有在 ComplexNumber
class 中 覆盖 它,您从 Object
的 toString()
方法:
ClassName@hashCodeOfTheObject
编辑:
toString()
return一个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