根据 Java checkstyle,方法中有太多 return 语句,如何简化我的代码以符合 2 return 最大值?
Have too many return statements within method according to Java checkstyle, how can I simplify my code to comply with the 2 return maximum?
我的百家乐游戏的一个方法是检查庄家是否可以根据玩家的手牌点数开第三张牌。
游戏本身有很多关于庄家是否可以抽牌的条件,这促使我创建了一个包含许多条件语句的方法。我有太多 return 个语句,我不知道如何将它限制为 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
}
}
我怎样才能简化这个?
编辑:
已修复,我很可能想多了。创建布尔变量并分配它而不是 returning 每个布尔值。
/**
* 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;
}
您可以将 bankerValue 设置为变量并在每个 if 语句中设置它的值,然后在 if 语句的末尾设置 return bankerValue。
你可以试试 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;
您可以这样重写您的方法:
/**
* 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;
}
我的百家乐游戏的一个方法是检查庄家是否可以根据玩家的手牌点数开第三张牌。
游戏本身有很多关于庄家是否可以抽牌的条件,这促使我创建了一个包含许多条件语句的方法。我有太多 return 个语句,我不知道如何将它限制为 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
}
}
我怎样才能简化这个?
编辑:
已修复,我很可能想多了。创建布尔变量并分配它而不是 returning 每个布尔值。
/**
* 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;
}
您可以将 bankerValue 设置为变量并在每个 if 语句中设置它的值,然后在 if 语句的末尾设置 return bankerValue。
你可以试试 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;
您可以这样重写您的方法:
/**
* 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;
}