0

こんにちは、以下のプログラムに対する私の疑問を解消してください。出力は 2 7 と表示されますが、私の理解では、go メソッドがもう 1 回余分な時間を呼び出し、カウントが 7 として増加する理由は 2.6 です。

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 メソッド内で変数bとの両方thisが同じになります。そのため、一度go(this)インクリメントstateし、その後再びint t3 = ++this.state;行に戻って再びインクリメントstateします。

于 2013-08-19T11:47:13.220 に答える
0

b2 で「go」を呼び出すと、state = 5 のときに if ステートメントがトリガーされるため、「go」が 2 回呼び出されます。これにより、渡した変数とメソッドを呼び出した Handed の両方で状態が 6 になります。

if ブロックの 2 番目のステートメントから再び「go」が呼び出されますが、状態が 5 ではないため、6 + 1、つまり 7 しか返されません。

于 2013-08-19T12:04:07.980 に答える
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は 2 回実行されます。1 回は戻り、もう 1 回はgo(this)戻ります。

于 2013-08-19T11:43:24.373 に答える