2013-06-08 2 views
0

Я видел исходный код:управления циклом с использованием JAVA

public class Test{ 
    public static void main(String[] args) 
    { 
    counting: 
     for(int k = 0; k < 100; k++) 
     for(int i = 0; i < 100; i++) 
     if(i == 9) break counting; 
    }  
} 

Теперь я реализовал петлю следующим образом:

public class Test{ 
    public static void main(String[] args) 
    { 
     counting: 
     for(int k = 0; k < 100; k++) 
     { 
     System.out.println(k);//to see how many times the outer loop runs 
     for(int i = 0; i < 100; i++) 
     {    
      if(i == 9) break counting; 
     } 
    } 
} 

Я получил, что внешний цикл выполняется один раз, а внутренние будет работать 9 раз Если я не ошибаюсь. Я пришел к выводу, что это вложенные петли, в которых реализовано управление потоком. Я не понимаю, какова роль counting?

+0

'подсчет:' это этикетка. Что вы ожидали от этого? Возможно, вы намеревались использовать 'continue counting; 'вместо break; –

ответ

3

counting: - это ярлык. Когда вы позвоните:

break counting; 

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

+1

Он должен работать бесконечно. Мое затмение не соглашается, хотя ... – mwerschy

+0

Код не будет перескакивать на ярлык. Он вырвется из цикла с надписью 'counting', что означает переход к * после * цикла. – tom

+0

Я просто понял это. Я предполагал, что это подскочит к лейблу ... Обновление. Ярлыки Java сбивают с толку ... – mwerschy

0

Когда вложенный цикл, если вы хотите breakfor loop, вы должны определить цель break, так что вы можете label решить это. напр:

lb1: 
for(int i = 0; i < 10;i++){ 
    lb2: 
    for(int j = 0; j < 10;j++){ 
    for(int i = 0; i < 10;i++){ 
     if(a) break lb2; // this will break second loop 
     if(b) break lb1; // this will break first loop 
    } 
    } 
} 
2

Он определяет, какой цикл будет остановлен с break заявлением. Если вы не используете ярлык, тогда внутренний цикл будет прерван, но внешний будет продолжаться в обычном режиме.

2

Операция break сама по себе позволяет вам выйти из одного цикла; в большинстве случаев этого достаточно, но бывают ситуации, когда вы должны выйти из нескольких циклов одновременно.

Добавление метки в цикл, из которого вы хотите разразиться, и ссылка на эту метку из инструкции break позволяет одновременно завершить несколько вложенных циклов.

Код с вашего поста не является хорошей иллюстрацией; лучшим вариантом использования является поиск в многомерном массиве. Предположим, вы хотите найти пару {row, col} такой, что array[row][col] == searchTerm. Вы можете сделать это следующим образом:

int row = -1, col = -1; 
searching: 
for(int r = 0 ; r != MAX_ROW ; r++) { 
    for(int c = 0 ; c != MAX_COL ; c++) { 
     if(array[r][c] == searchTerm) { 
      row = r; 
      col = c; 
      break searching; 
     } 
    } 
} 
+1

Следует добавить: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html –

0

Надеюсь, вы поймете!

public class Test { 
    public static void main(String[] args) { 
     counting: for (int k = 0; k < 100; k++) { 
      System.out.println(k); 
      for (int i = 0; i < 100; i++) { 
       if (i == 9) { 
        System.out.println("I'm going to break!"); 
        break counting; // -----┐ 
       }      //  | 
      }       //  | 
     }        //  | 
     System.out.println("Broken!"); // <----┘ 
    } 
} 
Смежные вопросы