java为什么打印这个结果

时间:2017-10-23 20:16:51

标签: java

我有以下两个课程:

public class Echo {
    int ilosc = 0;
    void witaj() {
        System.out.println("sieeeemasz... ");
    }
}

public class EchoTester {
    public static void main(String[] args) {
        Echo e1 = new Echo();
        Echo e2 = new Echo();
        int x = 0;
        while (x < 4) {
            e1.witaj();
            e1.ilosc = e1.ilosc + 1; 
            if (x == 3) {
                e2.ilosc = e2.ilosc + 1; 
            }
            if (x > 0) {
                e2.ilosc = e2.ilosc + e1.ilosc; 
            }
            x = x + 1;
        }
        System.out.println(e2.ilosc);
    }
}

控制台打印对此练习有效的结果:

sieeeemasz... 
sieeeemasz... 
sieeeemasz... 
sieeeemasz... 
10

我的问题是最后一行 - 为什么10?如果有人能告诉我它是如何工作的?

2 个答案:

答案 0 :(得分:1)

使用笔和纸,您可以跟踪对象成员的值。在使用调试器之前,这是一种更好的方法,因为您的问题非常简单。如果你有很多变量需要跟踪,并且它们的值会发生很多变化,并且以微妙的方式使用调试器会更好。

enter image description here

答案 1 :(得分:0)

我建议您使用调试器逐步检查程序。就个人而言,我已经将你的代码抛入BlueJ,设置一个断点并获得所有信息,为什么会这样。

完全发生了什么:

  1. e1.ilosc在第8行中设置为1(0 + 1)
  2. 在下一次循环播放时,e1.ilosc再次增加1
  3. 当x = 1时,第13行中的if-Statement触发,将e1.ilosc添加到e2.ilosc(2 + 0),将e2.ilosc设置为2。
  4. x增加1,e1.ilosc增加1,使其为3。
  5. 第13行中的if会再次触发,将e1.ilosc添加到e2.ilosc(3 + 2)。 e2.ilosc现在是5。
  6. e1.ilosc增加到4,x增加到3,第10行触发时,e2.ilosc增加1,使其为6。
  7. 第13行中的if仍然会触发并再次将e1.ilosc(4)添加到e2.ilosc(6)。 4 + 6 = 10所以e2.ilosc现在是10。
  8. x增加到4,循环停止执行,程序打印10。