如何在java中中断函数

如何在java中中断函数,java,Java,伙计们,我是java的初学者。。。我想让一个函数循环遍历hashmap,例如它包含 0[3],3[4,5],6[2] 当方法Isisteinhered为真时中断,否则返回false。。。这是我做的 private boolean isInherited() { boolean isInherited = false; for (Entry<Integer, Set<Integer>> entry : siteIndeciesMap.entrySet())

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

0[3],3[4,5],6[2]
当方法Isisteinhered为真时中断,否则返回false。。。这是我做的

  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;
  }
私有布尔值IsInhered(){
布尔值IsInhered=false;
for(条目:siteIndeciesMap.entrySet()){
for(整数索引:entry.getValue()){
如果(Issteinhered(索引)){
打破
}
}
}
返回false;
}

如果未找到继承的站点,则返回false,如果输入中断,则应中断所有方法。。。那么,这种方法有什么问题呢?

您可以使用标签与外部循环断开()

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

  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;
  }
私有布尔值IsInhered(){
布尔值IsInhered=false;
布尔值shouldBreak=false;
for(条目:siteIndeciesMap.entrySet()){
for(整数索引:entry.getValue()){
如果(Issteinhered(索引)){
shouldBreak=true;
打破
}
}
如果(应该中断){
打破
}
}
返回false;
}

似乎您希望返回而不是中断。如果不使用标签,
break
只会让您摆脱一层循环,在这种情况下,您需要报告总体成功情况,而您当前的方法无法做到这一点

private boolean isInherited() {
    for (Entry<Integer, Set<Integer>> entry : siteIndeciesMap.entrySet()) {
        for (Integer index : entry.getValue()) {
            if (isSiteInherited(index)) {
                return true;
            }
        }
    }
    return false;
}
私有布尔值IsInhered(){
for(条目:siteIndeciesMap.entrySet()){
for(整数索引:entry.getValue()){
如果(Issteinhered(索引)){
返回true;
}
}
}
返回false;
}

我们需要看到
isSiteInherited()
“它应该与所有方法断开”-->只需
返回false然后?你打破了循环。要离开这个方法,只需从中返回
即可。@GhostCat我相信他必须
返回true
,并且不能从循环中中断,所以重复的方法会让他和其他用户感到困惑,不是吗?在命名变量和其他项时,名称部分通常应该包含自然语言单词,因此应该拼写相同(在该部分)作为自然语言,避免维护人员的错误和混淆。因此,应该纠正
siteIndeciesMap
。一次可以突破多个循环层,这与此处发布的内容相反。@LewBloch:如果使用标签,当然;然而,我没有使用标签。我觉得我惯用的方法更好;现在我不在手机上,我可以把它清理得更好一点。这不是更好的方法。标签是为这种情况设计的。