如何在for循环中退出(转到父循环的下一个元素)for循环

How to exit (go to next element of parent loop) a for loop inside a for loop

本文关键字:循环 for 下一个 元素 退出      更新时间:2023-10-16
for (int i = 0; i<10; i++)
{ 
  //do some validation for record length
  //if it is not valid
  continue; // goes to the next iteration in for loop for 'i'
  for (int j = 0; j<5; j+=2)    
  {
     //do some more validation for individual record
     //if it is not valid

在这里,如果我使用continue,它应该转到下一个i。在这里它将进入下一个j有人能告诉我怎么做吗?

如果在内部循环之后有东西,您需要专门测试外部循环中的标志:

for(some_outer_vars){
  bool should_skip = false;
  // ...
  for(some_inner_vars){
    // ...
    if(your_condition){
      should_skip = true;
      break;
    }
  }
  if(should_skip)
    continue;
  // ...
}

j循环中使用break;将完全退出j循环。

但至少要花几分钟的时间来决定替代算法、方法或终止条件是否可以消除在循环中间中断的需要。

在内部循环之后有什么内容吗?如果没有,您可以使用break:

for (i = 0; i < 10; i++)
{
  if (i is no good)
    continue;
  for (j = 0; j < 5; j++)
  {
     if (j is no good)
       break;
  }
}

如果以后确实需要执行某些操作,可以将break与其他标志结合使用。

改为放置break;。这应该会让你脱离内部循环。

对于(int i=o;i<10;i++({

}

for(int j=0;j<5;j+=2({打破}

"break;"将结束当前的j循环并转到下一个i。

如果不能安排逻辑,使内循环中的break直接继续外循环,那么执行以下操作:

for (int i = 0; i<10; i++)
{ 
    if (!valid(i)) continue;
    for (int j = 0; j<5; j+=2)    
    {
        if (!valid(i,j)) goto continue_i;
        do_whatever_with_i_and_j()
    }
    more_stuff_here();
continue_i:
}

我已经说过了。与设置标志,然后中断,然后立即再次检查标志并有条件地继续的版本相比,代码更短、更简单、更易于阅读和分析。

另一个选择是这个

void inner_loop(int i) {
    if (!valid(i)) return;
    for (int j = 0; j<5; j+=2)    
    {
        if (!valid(i,j)) return;
        do_whatever_with_i_and_j()
    }
    more_stuff_here();
}
for (int i = 0; i<10; i++)
{
    inner_loop(i);
}

然而,根据内部循环的作用,您可能会发现自己构建了一个相当好的机制,让它可以访问它应该修改的内容。

社区维基,因为这(或类似的情况(在so上已经争论了很多次,以至于实际上定义了"主观的和争论的"。

在处理循环时,我尽量避免中断和继续,因为它们很容易被遗漏,如果以后必须重组代码,它们的含义也会改变。您可以使用j=5;当您需要退出内部循环时。如果添加第三个循环或开关,则该行的含义不会改变。有时,您需要在测试i和j的循环中添加if语句,甚至需要添加一个新变量,如bool iIsInvalid,但我认为这会使控制流更容易读取。