2011-11-06 85 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腳趾來說不起作用。 –