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