【问题标题】:how to break a function in java [duplicate]如何打破java中的函数[重复]
【发布时间】:2017-07-05 13:37:14
【问题描述】:

伙计们,我是 java 的初学者......我想创建一个函数来循环遍历一个 hashmap,例如它包含

0[3],3[4,5],6[2]

当方法 isSiteInherited 为真时中断,否则返回假...这是我所做的

  private boolean isInherited() {
  boolean isInherited = false;
    for (Entry<Integer, Set<Integer>> entry : siteIndeciesMap.entrySet()) {
      for (Integer index : entry.getValue()) {
          if(isSiteInherited(index)){
              break;
          }
      }
    }
    return false;
  }

如果没有找到继承的站点,则返回 false,如果它进入中断,它应该从所有方法中断......那么这个方法有什么问题

【问题讨论】:

  • 我们需要看到isSiteInherited()
  • “它应该脱离所有方法” --> 那么return false; 呢?
  • break 循环。要离开该方法,只需从中 return 即可。
  • @GhostCat 我相信他必须return true 并且不能从他的循环中中断,所以副本会让他和其他用户感到困惑,不是吗?
  • 在命名变量和其他项目时,名称部分通常应包含自然语言单词,因此应与自然语言单词(在该部分)拼写相同,以避免维护人员的错误和混淆.因此siteIndeciesMap 应该被更正。

标签: java


【解决方案1】:

好像你想return而不是break。如果不使用标签,break 无论如何只能让您摆脱一层循环,在这种情况下,您需要报告总体成功,这不是您当前的方法所做的。

private boolean isInherited() {
    for (Entry<Integer, Set<Integer>> entry : siteIndeciesMap.entrySet()) {
        for (Integer index : entry.getValue()) {
            if (isSiteInherited(index)) {
                return true;
            }
        }
    }
    return false;
}

【讨论】:

  • 与这里发布的相反,一个人肯定可以一次突破不止一层循环。
  • @LewBloch:如果有人使用标签,当然;但是,我没有使用标签。我觉得我的惯用方法更好;现在我不在手机上,我可以更好地清理它。
【解决方案2】:

您可以使用标签从外部循环中断 (https://stackoverflow.com/a/886979/4949918)。

更好的方法可能是使用布尔值表示您已从外循环中的内循环中断。

  private boolean isInherited() {
  boolean isInherited = false;
  boolean shouldBreak = false;
    for (Entry<Integer, Set<Integer>> entry : siteIndeciesMap.entrySet()) {
      for (Integer index : entry.getValue()) {
          if(isSiteInherited(index)){
              shouldBreak = true;
              break;
          }
      }
      if (shouldBreak) {
           break;
      }
    }
    return false;
  }

【讨论】:

  • 这不是更好的方法。标签就是为这种情况而设计的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-02-20
相关资源
最近更新 更多