【问题标题】:Alternative for 'continue' keyword [closed]“继续”关键字的替代品[关闭]
【发布时间】:2014-02-28 00:14:13
【问题描述】:

我正在浏览有关 continue 关键字的问题以更好地理解它,我偶然发现了这一行 in this answer

这些可能是维护定时炸弹,因为除了上下文之外,“继续”/“中断”和它正在继续/中断的循环之间没有直接的联系;

我有这个 for 循环:

for(Object obj : myArrayList){
  if(myArrayList.contains(someParticularData)){
       continue;
    }
   //do something
}

现在,我的问题是 - 可以按照我上面所做的方式使用 continue 还是有任何问题?如果是,我可以遵循的替代方法是什么?任何形式的指导都会有所帮助。谢谢。

更新:在这种特殊情况下,我的目标是迭代 Collection(在本例中为 ArrayList),并检查其中是否包含某些特定数据,如果出现则跳过该迭代是真的。 有人指出myArrayList.contains(someParticularData) 是一次性操作,最好在循环之外执行该检查,这正是我所寻找的。另外,我了解到,如果我可以基于某些条件if(someConditon) 使用continue,我可以通过使用if(!someCondition) 很好地避免它。

【问题讨论】:

  • 我认为这取决于您希望循环如何工作。
  • 用法取决于你的逻辑实现。一个盒子并不适合所有尺寸。
  • 嵌套循环会影响可读性和代码维护,否则没关系。
  • 如果您认为问题不适合 SO 标志迁移到 Programmers Stackexchange,请不要将问题关闭为“主要基于意见”
  • 稍微相关的旁注:在某些方面,使用 continue/break 可以等同于Single Function Exit Pointstackoverflow.com/questions/36707/…的概念

标签: java loops continue


【解决方案1】:
for(Object obj : myArrayList){
    if(someCondition){
       continue;
    }
    //do something 
}

可以替换为:

for(Object obj : myArrayList){
    if(!someCondition){
       //do something 
    }
}

恕我直言,只要你没有很多(比如 2-3 continue/break/return),维护就可以了。

【讨论】:

    【解决方案2】:

    这段代码用处不大

      for(Object obj : myArrayList) {
        // You're checking again and agian the condition that's loop independent
        if(myArrayList.contains(someParticularData)){
          continue;
        }
       //do something
      }
    

    一个更有效的实现是(首先检查你是否需要循环

      if (!myArrayList.contains(someParticularData))
        for(Object obj: myArrayList) {
          //do something
        }
    

    continue 在这样的情况下很方便:

      for(Object obj : myArrayList) {
        // Check for each item: do we need to proceed this item
        if (someArrayList.contains(obj))
          continue;
    
        //do something
      }
    

    【讨论】:

    • 好收获!我错过了
    • 很抱歉,您是要我检查是否需要 for 循环吗?如果是这样,是的,我需要遍历 Collection,如果它包含特定数据,我想跳过该迭代。
    • @AnjanBaradwaj - Dmitry 想说的是“ArrayList.contains()”是一次性操作.. 将其放入 for 循环没有帮助..
    • @TheLostMind 明白了,感谢您的澄清。
    • @Dmitry ,我假设最后一个 sn-p 中的 Contains 应该是小写的?
    【解决方案3】:

    每当您在某个值范围内循环时,您都在处理介于初始值和最终值之间的每个值...

    例如,如果您要添加奇数。 使用循环会很方便,它将增加 2 而不是对每个奇数继续,

    for (int i = 0; i < 100 ; i=i+2){
       // do addition
    }
    

    但是,如果您正在修改循环中正在检查的值,那么 continuebreak 是一个很好的实施方式。

    例如,

    boolean flag = false;
    // flag will be modified in some iteration of loop, but you don't know which.
    for ( int i = 0 ; i < 100 ; i++ ) {
       if ( flag ) {
          continue;
       }
       // flag modified somewhere..
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-17
      • 2012-06-16
      • 2011-06-16
      • 2011-12-17
      • 2010-10-21
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多