关于java:为什么我收到错误“此方法必须返回类型的结果…”?

Why do I receive the error “This method must return a result of type …”?

当我清楚地返回变量"card"时,是否有人知道我为什么会收到错误"this method must return a result of type card"?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public Card playCard(int id){
    int i = 0;
    for (Card element : hand){
        if (i <= hand.size())
        {          
            if (element.getID() == id)
            {
                Card card = hand.get(i);
                hand.remove(i);
                return card;
            }
            else
            {
                i++;
            }

        }
        else
        {
            throw new NullPointerException("Card does not exist in     hand");
        }
    }
}


除了在一个可能的场景中,您的方法不会返回任何内容。它必须在所有可能的场景中返回某些内容(或抛出异常)。

我想你是想这样做的:

1
2
3
4
5
6
7
8
9
public Card playCard(int id){

    for (Card element : hand) {
        if (element.getID() == id) {
            return element;
        }
    }
    throw new SomeAppropriateException("Card does not exist in     hand");
}

…但我有点猜测(因为我不知道hand是什么,但它看起来很像List)。该代码要么总是执行return语句,要么抛出异常,如果不发生这些事情,就无法到达方法的末尾。

注意,对于不是由null指针引起的条件,抛出NullPointerException是一个坏主意(tm)。(最好在你把你的{}放在哪里保持一致。)


您的方法签名是:

1
public Card playCard(int id){

这意味着您必须返回一个Card对象。您的代码只有一条返回语句,但代码中有许多路径。必须为每个路径返回一个Card对象


正如Tarlen所暗示的,您的代码需要这样修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public Card playCard(int id){
    int i = 0;
    for (Card element : hand){
        if (i <= hand.size())
        {          
            if (element.getID() == id)
            {
                Card card = hand.get(i);
                hand.remove(i);
                return card;
            }
            else
            {
                i++;
            }

        }
        else
        {
            throw new NullPointerException("Card does not exist in     hand");
        }
    }
    return null;
}

我相信这将解释你的计划需要采取的所有可能的路线。你总是要跟踪返回到方法可以退出的任何地方。如果它可以在不命中返回语句的情况下退出,您将看到该错误。


对于整个方法,您需要有一个默认的return语句(或异常/错误),或者对于代码中的每个可能的执行路径,至少有一个return语句(或异常/错误)。现在,你们两个都没有。


这是因为如果hand为空,则不会返回任何值。

在你的for循环后面加一个returnthrow