需要在if else语句中切换布尔值

时间:2011-11-06 17:43:01

标签: java

好的,我需要能够调用一个方法并切换一个布尔值,以便每当我需要能够调用方法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;
   }  

}

5 个答案:

答案 0 :(得分:3)

怎么样:

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

答案 1 :(得分:2)

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;
}

答案 2 :(得分:1)

t = !t;
if(t) {
  return rX;
} else {
  return rO;
}
BTW,该方法的名称具有误导性。它应该是getSomething,而不是setSomething,基于它的作用。

答案 3 :(得分:0)

您尝试的问题是:

调用方法后,您没有更改t的值。 此外其他如果(t == false)等同于其他

每次调用方法时,都会更改t的值。类似的东西:

if(t)
{
   t = false;
   return rX;
}
else
{
   t = true;
   return rO;
}

答案 4 :(得分:0)

  • 将常量声明为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;
    }
}