[英]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.