【问题标题】:Return value, with an if statement in a for loop返回值,在 for 循环中带有 if 语句
【发布时间】:2018-03-07 01:34:17
【问题描述】:

我的方法应该返回一张卡片,我在 for 循环中有一个 if 语句 - 我不想在最后添加“return c”,因为这将返回卡片甲板中的最后一张卡片。我收到错误消息说“必须返回类型卡”。你有什么建议?

附:这是我的第一篇文章之一 - 如果它有一个明显的答案,我们深表歉意。所有这些括号都让我失望......

  public Card findRightCardWithIndex(int index) throws IllegalArgumentException {
    for(Card c:carddeck) {
      if (c.getIndex() == index) {
        return c;
      } else {
        throw new IllegalArgumentException("Invalid index");
      }
    }
  }

【问题讨论】:

  • 去掉else。将throw 移到for 语句之外。否则,如果carddeck 为空,该方法会返回什么?
  • 'return c' at the end, as that will return the last Card in carddeck 会导致另一个编译错误,因为 c 仅在 for 循环内部定义

标签: java if-statement foreach


【解决方案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");
}

【讨论】:

    【解决方案2】:

    您要做的是扫描整个列表,如果找不到,则在找不到时生成响应..

     public Card findRightCardWithIndex(int index) throws IllegalArgumentException {
        for(Card c:carddeck) {
          if (c.getIndex() == index) {
             return c;
          }
        }
    
        throw new IllegalArgumentException("Invalid index");
    
      }
    

    【讨论】:

      【解决方案3】:

      或许您应该将此代码更改为 Java 8 Streams,这样会更明显且不易出错(但速度会稍慢)。

      例子:

      public Card findRightCardWithIndex(int index) throws IllegalArgumentException {
          return cards.stream()
                      .filter(c -> c.getIndex() == index)
                      .findFirst()
                      .orElseThrow(()->new IllegalArgumentException("Invalid index"));
      }
      

      【讨论】:

        【解决方案4】:

        创建一个空 Card 对象,如果您在循环内找到索引,则将卡片分配给您的对象并使用 break 终止循环。 如果您的对象不为空,则返回该对象,否则您将抛出异常,因为这意味着没有具有该索引的卡。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-29
          • 1970-01-01
          相关资源
          最近更新 更多