返回值,在for循环中使用if语句

时间:2017-09-26 00:31:31

标签: java if-statement foreach

我的方法应该返回一张卡片,我在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");
      }
    }
  }

4 个答案:

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