2017-03-17 115 views
0

在製作遊戲卡我來到了一個直的枚舉,這個數字被設置爲一個枚舉王牌,二,三等和我寫這樣的檢查的當前枚舉

List<Number> number = Arrays.asList(Number.two, Number.two, Number.three, Number.four, Number.five); 

private void Straight() { 
    for(int currentCard = 0; currentCard < 4; currentCard++){ 
     for(int searchCard = 0; searchCard < 4; searchCard++){ 
     if (number.get(searchCard) == number.get(currentCard ++)){ 
      if (number.get(searchCard ++) == number.get(currentCard + 2)){ 
       if (number.get(searchCard + 2) == number.get(currentCard + 3)){ 

       } 
      } 
     } 


     } 

看着這個,我看到currentCard會循環而不是像我希望它那樣的枚舉集合。哪種方式是最有效的做到這一點

編輯: 我試着寫了一些這樣的代碼

Number currentCard = number.get(0); 

,但就像我預期它不等於整數值,現在我想知道是否有有人把它等於一個整數。

+0

您使用的是java.lang.Number嗎? – Paul

+0

我正在使用一個枚舉集,我將其命名爲Number。 @Paul –

+0

謝謝你的澄清。這真是一個令人困惑的名字 - 我希望這個套裝的名字不是'String'!儘管如此,請將枚舉名稱更改爲「Value」,或者將其作爲卡片類別的一部分,並在必要時通過「Card.Number」引用它。 – Paul

回答

0

使枚舉特殊的主要事情之一是它們可以與==比較原始類型。嘗試循環你的枚舉令牌,而不是整數。

List<Number> playerHand = Arrays.asList(Number.two, Number.two, Number.three, Number.four, Number.five); 

public boolean isStraight(List<Number> hand) { 
    int straightPosition = 0; 
    boolean inStraightRun = false; 
    Number lastStraightCard; 
    for (int i = 0; i < Number.values().length; i++) { 
     Number card = Number.values()[i]; 
     if (!inStraightRun) { 
      if (card == hand[straightPosition]) { 
       inStraightRun = true; 
       lastStraightCard = card; 
       straightPosition++; 
      } 
      else if (card == Number.ten) { 
       break;//straight no longer possible 
      } 
     } 
     else { 
      if (card == hand[straightPosition] && 
       lastStraightCard == Number.values()[i - 1]) { 
       lastStraightCard = card; 
       straightPosition++; 
      } 
      else { 
       break;//straight no longer possible 
      } 

      if (straightPosition > hand.length() - 1) { 
       break;//straight! Stop looping 
      } 
     } 
    } 
    return straightPosition == hand.length(); 
}