2011-11-06 89 views
0

好的,我需要能够调用一个方法并切换布尔值,以便每次我需要能够调用方法的时候,返回值都是不同的。返回X,O,X,O,X,O,X,O之间进行时间开关,X需要在if else语句中切换布尔值

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

} 
+1

变化t其逻辑不是(即,它的倒数),然后返回RX0:T =;!返回rx0;当你回到该功能时,这将不会为你设置好。 –

+0

你可以使用'rXO = t? rX:r0;'而不是'if(){}否则if(){}' – Vladimir

+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 
+0

试试看,我得到的每次都是x返回。 –

+0

@BrandonCruz你确定你写了'(t =!t)'而不是'(t ==!t)'? – MByD

+0

是的,我确定,我复制并粘贴了代码。 –

1
t = !t; 
if(t) { 
    return rX; 
} else { 
    return rO; 
} 

顺便说一句,该方法的名称是误导性的。它应该是getSomething,而不是setSomething,这取决于它的功能。

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

与你尝试的问题是:

没有更改的T值,在调用该方法后。 也否则,如果(T ==假)相当于其他

你有变化t的每次调用方法时的值。喜欢的东西:

if(t) 
{ 
    t = false; 
    return rX; 
} 
else 
{ 
    t = true; 
    return rO; 
} 
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; 
    } 
} 
+0

好的这段代码还挺有效,但我必须调用方法2次才能让它来回切换,我只能按照按钮的顺序工作,这对于tic tac脚趾来说不起作用。 –