方法返回类型错误

时间:2018-04-16 23:52:21

标签: java switch-statement blackjack

我正在使用一种方法在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();功能的一部分,但我无法弄清楚是什么。我很欣赏任何关于我可能出错的建议。

5 个答案:

答案 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)MapgetOrDefault

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个选项可以解决此问题:

  • 在开关
  • 中添加默认选项
  • 在方法
  • 的末尾抛出IllegalStateException

所以,最终的代码应该是这样的:

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