как перейти от внутреннего цикла к внешнему циклу

1

Вот структура моей программы:

for(loop1){

  if(condition1)
  {
    for(loop2)
    {
       for(loop3)
       {
         if(condition1_3)
           {
            As condition1_3 is true continue with loop2 next iteration, 
            No need to execute loop3 remaining iteration  
           }
           else
           {
             As condition1_3 is false no need to execute remaining part of loop3 and
             loop 2 but continue with loop1 remaining part i.e. condition1_1
           }
        }
     }
  }
  if(condition1_1)
  {
  some code here
  }
}

Я знаю, что мне нужно использовать оператор continue и break но не понимаю, как именно? Скажите, пожалуйста, как достичь этого механизма?

  • 0
    Это не очень хорошая практика, но вы можете использовать именованный перерыв. Я просто посмотрю синтаксис
  • 0
    Это должно дать вам то, что вам нужно: разрывание вложенных циклов в Java
Показать ещё 3 комментария
Теги:
for-loop

7 ответов

2

Если я понимаю ваш вопрос, вы можете использовать помеченное continue,

loop1: for (;;) {
  if (condition1) {
    loop2: for (;;) {
      loop3: for (;;) {
        if (condition1_3) {
          continue loop2;
        } else {
          continue loop1;
        }
      }
    }
  }
}
1

Вы можете сделать следующее:

for(loop1){

  if(condition1)
  {
    for(loop2)
    {
       boolean flag=false;
       for(loop3)
       {
         if(condition1_3)
           {
            break; 
           }
           else
           {
             flag=true;
             break;
           }
        }
        if(flag)
          break;
     }
  }
  if(condition1_1)
  {
  some code here
  }
}
0

Я не совсем понимаю, что вы имеете в виду. Для меня это просто похоже, что вы хотите выпрыгнуть из петель, если выполнено конкретное условие. Таким образом, вы можете либо определить метку для ваших циклов, и использовать continue labelLoopX; или вы можете удовлетворять условию завершения цикла loop3 если loop3 condition1_3==true или. условие выхода loop3 и loop2 если condition1_3==false. например, если loop3 выглядит как for ( int я = 0; я < 10; i++ ):

if(condition1_3){
     //do something important
     i=10; //sets i to 10 and condition i < 10 is unsatified
}
else{
     //do some other important stuff
     i=10; //satify loop3 exitcondition
     j=10; //satify loop2 exitcondition
}
0

Чтобы разразиться и не продолжить использование break3 use break; if (condition1_3) break; Перерыв; оператор только вырывается из текущего цикла, я думаю, а не в петле, в которую он вложен.

Изменение: пропустить вопрос. Чтобы выйти из обеих циклов, вы можете сделать логический флаг до того, как обе циклы и в конце обеих циклов будут иметь if (breakOut) break; Это будет решить вопрос

  • 0
    Так что насчет части, где OP просит разорвать 2 цикла?
0

Сделайте следующее:

for(loop1){
  boolean flag = false;

  if(condition1)
  {
    for(loop2)
    {
       if(flag == true)
         break;

       for(loop3)
       {
         if(condition1_3)
           {    
             break;
           }
           else
           {
              flag = true;
              break;
           }
        }
     }
  }
  if(condition1_1)
  {
  some code here
  }
}
0

Имейте флаги выхода, которые устанавливаются, когда вы хотите выйти из определенного цикла и проверять в каждом соответствующем цикле, продолжать или выходить.

boolean exitLoop2 = false;

for(loop1){

 if(condition1)
 {
    for(loop2)
    {
       for(loop3)
       {
         if(condition1_3)
         {
             //As condition1_3 is true continue with loop2 next iteration, 
             //No need to execute loop3 remaining iteration  
             break;
         }
         else
         {
            //As condition1_3 is false no need to execute remaining part of loop3 and
            //loop 2 but continue with loop1 remaining part i.e. condition1_1
            exitLoop2 = true;
            break;
          }

       }
       if(exitLoop2)
       {
           break;
       }
    }
 }
 if(condition1_1)
 {
    some code here
 }

}

0

Вариантом будет использование переменных - но вы должны подумать о правильной настройке значений:

boolean runFor1 = true;
boolean runFor2 = true;
boolean runFor3 = true;
for(loop1 && runFor1)
{
    for(loop2 && runFor2)
    {
       for(loop3 && runFor3)
       {
           setRunForX here to skip/unskip loops
       }
     }
  }
}
  • 0
    Это не позволит разорвать цикл 2, чтобы избежать изменения остального кода в цикле 2, как представляется запросом

Ещё вопросы

Сообщество Overcoder
Наверх
Меню