为什么我收到错误“此方法必须返回类型的结果...”?

时间:2013-11-22 17:15:27

标签: java

任何人都可以看到为什么我会收到错误“此方法必须返回类型卡的结果”,当我清楚地返回类型为Card的变量“card”时?

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");
        }
    }
}

5 个答案:

答案 0 :(得分:5)

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

认为你打算这样做:

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语句或抛出异常,如果没有这些事情发生,就无法到达方法的末尾。

请注意,为不是由NullPointerException指针引起的条件抛出null是一个坏主意(tm)。 (最好在<{1}}和{的位置一致。)

答案 1 :(得分:1)

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

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语句,你会看到该错误。

答案 2 :(得分:1)

您的方法签名是:

public Card playCard(int id){

表示您必须返回Card个对象。您的代码只有一个return语句,但代码中有许多路径。您必须为每个路径返回Card个对象

答案 3 :(得分:0)

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

return循环后添加throwfor

答案 4 :(得分:0)

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

相关问题