【问题标题】:Difference between return and break inside ifs in a for loop [duplicate]for循环中ifs内部return和break之间的区别[重复]
【发布时间】:2018-03-26 17:33:49
【问题描述】:

我正在研究一个有这个代码的代码:

public void add(StockUpdate newStockUpdate) {

    for (StockUpdate stockUpdate : data) {
        if (stockUpdate.getStockSymbol().equals(newStockUpdate.getStockSymbol())) {
            if (stockUpdate.getPrice().equals(newStockUpdate.getPrice())) {
                return;
            }
            break;
        }
    }

    /* data.add mathod checks the new data against the existing data. If no change is found, the update is discarded. */
    this.data.add(0, newStockUpdate);
    notifyItemInserted(0);
}

我只是想知道这段代码中的returnbreak 语句是否有任何不同。因为我在这段代码之外测试了一个类似的例子,returnbreak 都停止了循环并终止了函数。

【问题讨论】:

  • break 将打破循环,而不是从整个方法返回。所以执行的下一行将是this.data.add...
  • 回想一下,也可以看看continue keyword
  • 感谢@Rogue!这就是我想知道的。与我给绿色复选标记的响应相同。

标签: java android for-loop return break


【解决方案1】:

break 只停止循环; return 停止整个方法。

breakreturn 这样的并置使得遵循add 方法的逻辑非常困难。考虑以下可能更容易理解:

public void add(StockUpdate newStockUpdate) {
  StockUpdate stockUpdate = findStockUpdateBySymbol(newStockUpdate.getStockSymbol());
  if (stockUpdate != null
      && stockUpdate.getPrice().equals(newStockUpdate.getPrice())) {
    return;
  }

  /* data.add mathod checks the new data against the existing data. If no change is found, the update is discarded. */
  this.data.add(0, newStockUpdate);
  notifyItemInserted(0);
}

// On non-android, it's easier to do this with a stream/findFirst.
private StockUpdate findStockUpdateBySymbol(StockSymbol sym) {
    for (StockUpdate stockUpdate : data) {
        if (stockUpdate.getStockSymbol().equals(sym)) {
            return stockUpdate;
        }
    }
    return null;
}

我想说这更容易理解(虽然有点冗长),因为它分离了正在做的不同事情:您正在尝试找到匹配的股票代码;如果你发现了,做其他事情。将所有这些混合到一个循环中会混淆该意图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 2013-06-09
    • 2011-01-24
    • 2012-02-09
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    相关资源
    最近更新 更多