public class TriVal {
private static int x;
private static int y;
private static int z;
TriVal(int x, int y, int z) {
TriVal.x = x;
TriVal.y = y;
TriVal.z = z;
}
public int sum(TriVal p2) {
int a = Math.abs(TriVal.x + p2.x);
int b = Math.abs(TriVal.y + p2.y);
int c = Math.abs(TriVal.z + p3.z);
int sum = a + b + c;
return sum;
}
}
这是一个包含一组3个值的对象的构造函数。 但是,我正在编写一个函数,通过对此对象的两个实例的x,y和z求和来创建一个新的TriVal。
所以说我们有
TriVal p1 = new TriVal(10, 10, 10);
TriVal p2 = new TriVal(20, 20, 20);
调用函数
p1.sum(p2)
(其中包括在课堂的其他地方)应该返回90。 但是,它返回120。 我正在学习在创建TriVal对象的新实例时,先前定义的p1实例以某种方式被设置为与p2相同的值,这解释了总和为120。 我相信这个错误位于我的构造函数中的某个位置,可能是我更新值或在类顶部声明变量的方式? 任何有用的提示将不胜感激,谢谢!
答案 0 :(得分:0)
private static int x;
private static int y;
private static int z;
您将实例成员声明为静态,对于所有实例都是相同的。它们存储最后指定的值。删除静电,你会没事的。
正如@Orin指出的那样,您需要更改代码,以便将参数绑定到实例成员。