0

残念ながら、以下のコードスニペットは正常に機能していません。これはJLabelにアタッチされているため、クリックすると、PlayerOneまたはPlayerTwoのどちらが再生されているかを認識し、それに応じてブール値を再配置します。

[例:mouseClickedの場合:playerOneがtrueの場合、何かを実行し、playerOneをfalseに設定し、playerTwoをtrueに設定します]。

したがって、mouseClickedがアクティブになると、値が交換されます。

        public void mouseClicked(MouseEvent arg0) {
            if(playerOne = true){
                playerOne = false;
                playerTwo = true;
                boxOne.setIcon(xIcon);                  
            } else { if(playerTwo = true){
                playerOne = true;
                playerTwo = false;
                boxOne.setIcon(oIcon);
            }}

よろしくお願いします、トム!

4

3 に答える 3

2
if(playerTwo = true)

==ではありません=

ただし、代わりに1または2の「currentPlayer」整数を使用する方が簡単ではないでしょうか。これにより、両方のプレーヤーが同時にアクティブになる(おそらく不可能な)状態も防止されます。

于 2012-12-30T20:56:01.487 に答える
2

ここで割り当てを使用しています

if (playerTwo = true)

と置換する

if (playerTwo == true)

以上

if (playerTwo)
于 2012-12-30T20:56:54.187 に答える
0

Javaでは、2つの項目間の同等性をテストするオペランドは==割り当てである'='ではありません。割り当ては割り当てられた値を返すので、あなたの:

if (playerOne = true)

playerOneがに割り当てられるためtrue、常にtrueになり、ifがになりif (true)、関連付けられたステートメントが常に実行されます。

コードをリファクタリングする最良の方法は次のとおりです。

    public void mouseClicked(MouseEvent arg0) {
        if(playerOne) {
            playerOne = false;
            playerTwo = true;
            boxOne.setIcon(xIcon);                  
        } else if(playerTwo) {
            playerOne = true;
            playerTwo = false;
            boxOne.setIcon(oIcon);
       }
    }

冗長にsomething == trueなるので。

于 2012-12-30T21:01:06.727 に答える