我正在使用一种方法在Black Jack程序中处理一张卡片。这是我的方法:
public static String dealCard() {
Random randomCard = new Random();
int min = 1;
int rCard = min + randomCard.nextInt(13);
switch(rCard) {
case 1 : return "2";
case 2 : return "3";
case 3 : return "4";
case 4 : return "5";
case 5 : return "6";
case 6 : return "7";
case 7 : return "8";
case 8 : return "9";
case 9 : return "10";
case 10 : return "Queen";
case 11 : return "Jack";
case 12 : return "King";
case 13 : return "Ace";
}
}
但是我收到以下错误...
This method must return a result of type String.
这就是为什么我感到困惑,因为当我选择案件然后它返回卡片时我不会返回一个字符串?我很困惑。我试图改变我的方法并试图用If语句而不是switch case来做,但我仍然得到相同的方法。我怀疑这是我nextInt();
功能的一部分,但我无法弄清楚是什么。我很欣赏任何关于我可能出错的建议。
答案 0 :(得分:1)
在default:
声明中添加switch
:
public static String dealCard() {
Random randomCard = new Random();
int min = 1;
int rCard = min + randomCard.nextInt(12);
String cardDealt = "";
switch (rCard) {
case 1:
cardDealt = "Ace";
break;
case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:
cardDealt = Integer.toString(rCard);
break;
case 10:
cardDealt = "Jack";
break;
case 11:
cardDealt = "Queen";
break;
case 12:
cardDealt = "King";
break;
default:
throw new IllegalArgumentException("rCard unexpectedly out of range");
}
return cardDealt;
}
答案 1 :(得分:0)
您仍需要返回可能情况之外的值。
此外,虽然简单的if-else看起来更干净,但您可以使用通过案例陈述
switch(rCard) {
case 10 : return "Queen";
case 11 : return "Jack";
case 12 : return "King";
case 13 : return "Ace";
case 1 :
case 2 :
case 3 :
case 4 :
case 5 :
case 6 :
case 7 :
case 8 :
case 9 : return String.valueOf(rCard + 1);
default: return null;
}
答案 2 :(得分:0)
编译器无法确定您的某个case
语句是否会被命中,因此您将return
一个值。 必须是返回的值。您可以向default
添加switch
个案。或者,只需将您的上一个return
移至最后一个语句即可。此外,在每次调用时重新初始化Random
都是一个坏主意。在循环中, 可能 获得相同的种子。
private static Random randomCard = new Random();
private static final int MIN = 1; // <-- this is a CONSTANT
private static final int MAX = 13; // <-- this is a CONSTANT
public static String dealCard() {
int rCard = MIN + randomCard.nextInt(MAX);
switch(rCard) {
case 1 : return "2";
case 2 : return "3";
case 3 : return "4";
case 4 : return "5";
case 5 : return "6";
case 6 : return "7";
case 7 : return "8";
case 8 : return "9";
case 9 : return "10";
case 10 : return "Queen";
case 11 : return "Jack";
case 12 : return "King";
}
return "Ace";
}
您 可以进一步优化(imo)Map
和getOrDefault
private static Random randomCard = new Random();
private static final int MIN = 1; // <-- this is a CONSTANT
private static final int MAX = 13; // <-- this is a CONSTANT
private static final Map<Integer, String> faceCards = new HashMap<>();
static {
faceCards.put(11, "Jack");
faceCards.put(10, "Queen");
faceCards.put(12, "King");
faceCards.put(13, "Ace");
}
public static String dealCard() {
int rCard = MIN + randomCard.nextInt(MAX);
return faceCards.getOrDefault(rCard, String.valueOf(rCard + 1));
}
答案 3 :(得分:0)
此代码无法编译,因为如果rCard小于1或大于13,则错过了return语句。 您有2个选项可以解决此问题:
所以,最终的代码应该是这样的:
public static String dealCard() {
Random randomCard = new Random();
int min = 1;
int rCard = min + randomCard.nextInt(13);
switch(rCard) {
case 1 : return "2";
case 2 : return "3";
case 3 : return "4";
case 4 : return "5";
case 5 : return "6";
case 6 : return "7";
case 7 : return "8";
case 8 : return "9";
case 9 : return "10";
case 10 : return "Queen";
case 11 : return "Jack";
case 12 : return "King";
case 13 : return "Ace";
}
throw new IllegalStateException("No return value fo case " + rCard);
}
答案 4 :(得分:0)
使用枚举更优雅和优化的方式:
node