0

嗨,您能解决我对以下程序的疑问吗?输出为 2 7,但据我了解,这是 2,6,为什么 go 方法又调用了一个额外的时间,而 count 递增为 7。

class Handed { 
    int state = 0; 
    Handed(int s) { 
        state = s; 
    } 

    public static void main(String... hi) { 
        Handed b1 = new Handed(1); 
        Handed b2 = new Handed(2); 
        int t1 = b1.go(b1); 
        int t2 = b2.go(b2); 
        System.out.println(t1 + " " + t2); 
        //System.out.println(b1.go(b1) + " " + b2.go(b2)); 
    } 

    int go(Handed b) { 
       if(this.state == 2) { 
          b.state = 5; go(this); 
       } 
       int t3 = ++this.state; 
       return t3;
    } 
}
4

5 回答 5

1

当您调用时b2.go(b2);,在 go 方法中,变量bthis都是相同的。所以go(this)将增加state一次,然后它再次回到int t3 = ++this.state;线并state再次增加。

于 2013-08-19T11:47:13.220 回答
0

这条线在做+1

int t3 = ++this.state; 

当你第一次打电话时

go(this)

然后

this.state 

是 6. 那么你在做什么

int t3 = ++this.state; 

在 IF 语句之后再次

那么 this.state 是 7

于 2013-08-19T11:46:40.350 回答
0

表达式 ++this.state 将状态增加 1。所以它得到 7。

于 2013-08-19T11:47:11.347 回答
0

++this.state被执行两次,一次是在go(this),一次是在返回之后。

于 2013-08-19T11:43:24.373 回答
0

当您在 b2 上调用“go”时,“go”会被调用两次,因为当 state = 5 时,if 语句会触发。这会导致您传递的变量和调用方法的 Handed 的状态都变为 6。

从 if 块中的第二条语句再次调用“go”,但由于状态不是 5,因此您只返回 6 + 1,即 7。

于 2013-08-19T12:04:07.980 回答