我正在进行一项产生意外输出的课堂练习。希望有人能解释我所缺少的东西。
我对Class1的最后4行很好,然后我有点困惑。
public class Class1 {
public static void main(String[] args){
Class2 val1 = new Class2 ();
Class2 val2 = new Class2 ();
val1.set (3);
val2.set (4);
for (int num = 11; num>=1; num -=4){
val1.change (num);
val2.change(val1.get());
System.out.println("Val1 " + val1);
System.out.println("Val2 " + val2);
}
val1 = val2;
val1.change(3);
val2.change(val1.get());
System.out.println(val1.get());
System.out.println(val2.get());
}
} // end Class1
这是Class2
public class Class2 {
private int num1;
private int num2;
public void set (int inValue){
num1 = inValue;
num2 = inValue + 2;
}
public void change (int inValue){
num1++;
num2 += inValue;
}
public int get (){
return num1 + num2;
}
public String toString (){
return num1 + " = " + num2;
}
}
我期望从代码中得到的输出如下:
Val1 4 = 16
Val2 5 = 26
Val1 5 = 23
Val2 6 = 54
Val1 6 = 26
Val2 7 = 86
97
191
然而,运行代码时产生的输出是:
Val1 4 = 16
Val2 5 = 26
Val1 5 = 23
Val2 6 = 54
Val1 6 = 26
Val2 7 = 86
195
195
我不明白195的来源。
在最后4行之前,我们将val1设置为等于val2,所以现在两者都是(num1 = 7,num2 = 86) 在Class1的最后4行:
val1.change(3); // should change val1 to (num1 = 8, num2 = 89)
val2.change(val1.get()); // val.get() should return (8+89)=97,
将其作为参数传递给val2.change()应该导致val2(num1 = 8,num2 = 183)
System.out.println(val1.get()); // should produce (8+89)=97
System.out.println(val2.get()); // should produce (8+183)=191
然而,这些数字都不是输出。我错过了什么?
答案 0 :(得分:2)
由于这是一项家庭作业,我第二次大卫的建议是学习如何使用调试器。但是,我会给你一个提示 - 当你这样做时你的问题就出现了:val1 = val2;
- 你的变量现在都指向同一个对象。
这样想:
Class2 val1 = new Class2 (); //now val1 points to instance #1 of Class2
Class2 val2 = new Class2 (); //now val2 points to instance #2 of Class2
val1 = val2; //now val1 also points to instance #2 of Class2
答案 1 :(得分:0)
看起来在主要方法结束时你将val2分配给val1,你的意思是这样做吗?从那时起,val2和val1将是相同的。