簡體   English   中英

需要在if else語句中切換布爾值

[英]Need to toggle a Boolean in a if else statement

好的,我需要能夠調用一個方法並切換一個布爾值,以便每次需要調用9次方法以及每次在返回X,O,X,O,X之間進行切換時,返回值都是不同的,O,X,O,X

public class XOChecker {
    char rX = 'X';
    char rO = 'O';
    char rXO;
    boolean t = true;

   public char setXO() {

       if (t==true) {

       rXO = rX;

       } else if (t==false) {

       rXO = rO;

       }
       return rXO;
   }  

}

怎么樣:

return (t = !t) ? rO : rX;
//        ^ invert t every time
//                   ^ t changes every time, so the return value changes every time

以下代碼:

public class XOChecker {
    char rX = 'X';
    char rO = 'O';
    boolean t = true;

    public char setXO() {
        return (t = !t) ? rX : rO;
    }  

    public static void main(String [] args) {
        XOChecker xo = new XOChecker();
        for (int i = 0; i < 100 ; ++i) {
            System.out.print(xo.setXO());
        }
    }
}

輸出:

OXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOX
public class XOChecker {

    char xo = 'O';

    public char setXO(){
        xo = (xo=='O')?'X':'O';
        return xo;
    }

}

或者: xo = (char)('X'-xo+'O');

最后: xo^='X'^'O';

或更短:

public char setXO(){
    return xo^=23;
}
t = !t;
if(t) {
  return rX;
} else {
  return rO;
}

順便說一句,該方法的名稱具有誤導性。 基於它的作用,應該是getSomething ,而不是setSomething

您嘗試的問題是:

調用方法后,您不會更改t的值。 如果(t == false)else等價

每次調用該方法時,您都會更改t的值。 就像是 :

if(t)
{
   t = false;
   return rX;
}
else
{
   t = true;
   return rO;
}
  • 將常量聲明為static final (或完全擺脫它們)。

  • 聲明僅在內部使用的一切private

  • 與其他答復不同,請勿在表達式內進行賦值。

  • 使用更有意義的名稱。

開始:

public class XOChecker
{
    private static final char REPLY_TRUE = 'X';
    private static final char REPLY_FALSE = 'O';

    private boolean t = true;

    public char toggle()
    {
        final char result = t ? REPLY_TRUE : REPLY_FALSE;
        t = !t;
        return result;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM