1

Ruby のバックグラウンドがあり、Java は初めてです。それは私にとって少し混乱し、私は保存できなかった非常に単純な演習を持っています.

私の方法は次のようになります。

public void act() 
    {
        while((treeLeft() == false) && (treeRight() == false))
        {
            move();
        }
    }
}

したがって、通常、コードは両側に木があるかどうかを確認する必要があり ( treeleft == true および treeright == true)、実際に両側に木がある場合は停止し、動かなくなります。

でもなぜか左側の木しかないのに動かない?私は何を間違っていますか?

4

4 に答える 4

3

演算子が機能する方法&&は、最初に左側を評価することです。それが評価された場合false、式全体falseの結果は右側の結果に関係なく、右側を評価する必要はありません。したがって、treeLeft() が true と評価されると、whileが壊れて動きが停止します。

これを行う正しい方法は次のとおりです。

while(!(treeLeft() && treeRight())) 

whileこれは、treeLeft() と treeRight() の両方が true と評価されるまでループし続けることを意味します。

DeMorgan の法則を使用した代替バージョン:

while(!treeLeft() || !treeRight())
于 2013-10-17T14:24:41.880 に答える
2

&&演算子は、falseEITHER 値が であるときにいつでも評価されますfalse

||演算子は、false両方の値がfalseである場合にのみ評価され、おそらくこの状況で使用する必要があるものです。

while(!treeLeft() || !treeRight()) { /*do stuff*/ }

明確にするために(私はRubyに精通していません)...!treeLeft()とまったく同じですtreeLeft() == false

于 2013-10-17T14:22:05.327 に答える