我的方法应该返回一张卡片,我在for循环中有一个if语句 - 我不想添加'返回c'最后,因为这将返回卡片组中的最后一张卡片。我收到错误说"必须返回类型卡"。你会提出什么建议?
P.S。这是我的第一篇帖子 - 如果有明显的答案就道歉。所有这些括号都让我失望......
public Card findRightCardWithIndex(int index) throws IllegalArgumentException {
for(Card c:carddeck) {
if (c.getIndex() == index) {
return c;
} else {
throw new IllegalArgumentException("Invalid index");
}
}
}
答案 0 :(得分:1)
我认为这是正确的做法。
public Card findRightCardWithIndex(int index) throws IllegalArgumentException {
Card card;
for(Card c:carddeck) {
if (c.getIndex() == index) {
card = c;
break;
}
if(card != null){ // you shuld make an empty method here
return card;
}
throw new IllegalArgumentException("No card found");
}
答案 1 :(得分:0)
您要做的是扫描整个列表,如果找不到,请在找不到时生成响应。
public Card findRightCardWithIndex(int index) throws IllegalArgumentException {
for(Card c:carddeck) {
if (c.getIndex() == index) {
return c;
}
}
throw new IllegalArgumentException("Invalid index");
}
答案 2 :(得分:0)
也许您应该将此代码更改为Java 8 Streams,这样可以使其更加明显且不易出错(但速度稍慢)。
示例:
public Card findRightCardWithIndex(int index) throws IllegalArgumentException {
return cards.stream()
.filter(c -> c.getIndex() == index)
.findFirst()
.orElseThrow(()->new IllegalArgumentException("Invalid index"));
}
答案 3 :(得分:0)
创建一个null Card对象,如果在循环中找到索引,则将卡分配给对象并使用break终止循环。 如果你的对象不是null然后返回对象,否则你抛出一个异常,因为这意味着没有带有该索引的卡。
public Card findRightCardWithIndex(int index) throws IllegalArgumentException {
Card card = null;
for (Card c : carddeck) {
if (c.getIndex() == index) {
card = c;
break;
}
}
if (card != null) {
return card;
} else {
throw new IllegalArgumentException("Invalid index");
}
}