1

これが私のクラスの1つからのコードのセクションです:

public void run() {  

    SomeClass[][] someClassArray = new SomeClass[6][];  
    someClassArray[0] = new SomeClass[1];  
    someClassArray[1] = new SomeClass[4];  
    someClassArray[2] = new SomeClass[16];  
    someClassArray[3] = new SomeClass[64];  
    someClassArray[4] = new SomeClass[256];  
    someClassArray[5] = new SomeClass[1024];

    someFunction(0,0); 
}

someFunction(int i, int j) {  
    if(i == 5) {  
        someClassArray[i][j].flag = test(i,j); // BASE CASE  
    }  
    else {  
        if(someFunction(someClassArray(i+1,j*4))  
                && someFunction(someClassArray(i+1,j*4+1))  
                && someFunction(someClassArray(i+1,j*4+2))  
                && someFunction(someClassArray(i+1,j*4+3)))  
            someClassArray[i][j].flag = true;  
        else  
            someClassArray[i][j].flag = false;  
    }  

    return someClassArray[i][j].flag;
}


class SomeClass {  

        boolean flag;  
        // other stuff  
}  

boolean test(int i, int j) {  

        // test some property of this coordinate  
}  

基本的に、次の配列レベルの 4 つの対応するオブジェクトのフラグも true である場合にのみ、1 つの SomeClass オブジェクトのフラグを true に設定する必要があります。残念ながら、私はこれに問題があるようです:

if(someFunction(someClassArray(i+1,j*4))  
&& someFunction(someClassArray(i+1,j*4+1))  
&& someFunction(someClassArray(i+1,j*4+2))  
&& someFunction(someClassArray(i+1,j*4+3)))  

最初の条件のみをチェックしているようです (カウンターを追加したので、 someFunction が呼び出された回数を確認すると、取得する必要がある 1365 ではなく、6 までしか上がりませんでした); Java の if ステートメントで複数の関数呼び出しを行うことはできませんか? または私はそれを間違っていますか?

(ちなみにフォーマットについて申し訳ありません;これは私がここに投稿するのは初めてです)

4

2 に答える 2

4

オペランド&&||は、いわゆる短絡演算子です。これは、結果が既知の場合、それらが含まれているロジックがすぐに実行を停止することを意味します。

あなたの場合、それはおそらく最初の呼び出しの結果が であることを意味しSomeFunctionますfalse。その行には AND しかないため、結果はおそらくtrueもうあり得ないため、他の 3 つの呼び出しはSomeFunction実行されません。

結論: を に変更します&&&これは短絡せず、すべての呼び出しが実行されます。

于 2011-04-08T21:39:33.477 に答える
2

最初の関数呼び出しから結果が明らかな場合、if 条件を短絡できます。

于 2011-04-08T21:36:35.290 に答える