2017-11-22 22 views
0

私のバカラゲームの方法の1つは、銀行家がプレーヤーの手の価値に基づいて3枚目のカードを引き出すことができるかどうかを確認することです。Java checkstyleによるメソッド内でreturn文が多すぎる場合、2回の最大値に準拠するようにコードを単純化するにはどうすればよいですか?

ゲーム自体には、銀行家が描くことができ、多くの条件文を含むメソッドを作成するための多くの条件があります。返信文が多すぎるため、2に制限する方法がわかりません。

/** 
    * Determines if banker draws third card. 
    * @param playerCard Card object 
    * @param bankerHand Hand object 
    * @return boolean if banker gets third card. 
    */ 
    public static boolean mustHit(Card playerCard, Hand bankerHand) { 
     int playerValue = valueOf(playerCard); 
     int bankerValue = valueOf(bankerHand); 
     if (playerValue == 2 || playerValue == 3) { //player has 2 or 3 
      return bankerValue >= 0 && bankerValue <= 4; //banker must have 0-4 
     } else if (playerValue == 4 || playerValue == 5) { //player has 4 or 5 
      return bankerValue >= 0 && bankerValue <= 5; //banker must have 0-5 
     } else if (playerValue == 6 || playerValue == 7) { //player has 6 or 7 
      return bankerValue >= 0 && bankerValue <= 8; //banker must have 0-8 
     } else if (playerValue == 8) { //player has 8 
      return bankerValue >= 0 && bankerValue <= 2; //banker must have 0-2 
     } else { 
      return bankerValue >= 0 && bankerValue <= 3; 
      //if none of the above, banker must have 0-3 
     } 
    } 

どうすれば簡単にすることができますか?

編集:

修正済み、私はそれを考えすぎた可能性が高いです。ブール変数を作成し、各ブール値を返す代わりに代入します。

/** 
* Determines if banker gets third card. 
* @param playerCard Card object 
* @param bankerHand Hand object 
* @return boolean if banker gets third card. 
*/ 
public static boolean mustHit(Card playerCard, Hand bankerHand) { 
    int playerValue = valueOf(playerCard); 
    int bankerValue = valueOf(bankerHand); 
    boolean bankerDraw = false; 
    if (playerValue == 2 || playerValue == 3) { 
     bankerDraw = bankerValue >= 0 && bankerValue <= 4; 
    } else if (playerValue == 4 || playerValue == 5) { 
     bankerDraw = bankerValue >= 0 && bankerValue <= 5; 
    } else if (playerValue == 6 || playerValue == 7) { 
     bankerDraw = bankerValue >= 0 && bankerValue <= 8; 
    } else if (playerValue == 8) { 
     bankerDraw = bankerValue >= 0 && bankerValue <= 2; 
    } else { 
     bankerDraw = bankerValue >= 0 && bankerValue <= 3; 
    } 
    return bankerDraw; 
} 
+6

より適して。 –

+0

あなたの個人的な判断以上にオートマットを信頼すべきではありません。 –

答えて

1

あなたは変数としてbankerValueを設定し、文の場合にはそれぞれに値だ設定してからちょうどif文の終わりにbankerValueを返すことができます。

4

あなたはこのようなあなたの方法を書き換えることができ、switchステートメント

int playerValue = valueOf(playerCard); 
int bankerValue = valueOf(bankerHand); 
switch(playerValue){ 
case 2: // Will roll down to the next condition. 
case 3: return bankerValue >= 0 && bankerValue <= 4; break; 
case 4: 
case 5: return bankerValue >= 0 && bankerValue <= 5; break; 
case 6: 
case 7: return bankerValue >= 0 && bankerValue <= 8; break; 
case 8: return bankerValue >= 0 && bankerValue <= 2; break; 
default:return bankerValue >= 0 && bankerValue <= 3; 
2

を試みることができる:[codereview.se]へ

/** 
* Determines if banker draws third card. 
* @param playerCard Card object 
* @param bankerHand Hand object 
* @return boolean if banker gets third card. 
*/ 
public static boolean mustHit(Card playerCard, Hand bankerHand) { 
    int playerValue = valueOf(playerCard); 
    int bankerValue = valueOf(bankerHand); 
    int bankerLimit; 
    switch (playerValue) { 
    case 2: 
    case 3: 
     bankerLimit = 4; 
     break; 
    case 4: 
    case 5: 
     bankerLimit = 5; 
     break; 
    case 6: 
    case 7: 
     bankerLimit = 8; 
     break; 
    case 8: 
     bankerLimit = 2; 
     break; 
    default: 
     bankerLimit = 8; 
     break; 
    } 
    return bankerValue >= 0 && bankerValue <= bankerLimit; 
} 
関連する問題