任何人都可以看到为什么我会收到错误“此方法必须返回类型卡的结果”,当我清楚地返回类型为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");
}
}
}
答案 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
循环后添加throw
或for
。
答案 4 :(得分:0)
对于整个方法,您需要有一个默认的return
语句(或异常/错误),或者对于代码中的每个可能的执行路径,都需要至少一个return
语句(或异常/错误)。因为现在你没有它们。