Прерывает ли оператор switch-оператор for-l oop? - PullRequest
1 голос
/ 03 февраля 2020

Я пытаюсь понять возвращение, разрыв и продолжение. Я знаю, что перерыв остановит (внутренний) для l oop. Например:

for (int i = 1; i <= 3; i++) {
            // inner loop
            for (int j = 1; j <= 3; j++) {
                if (i == 2 && j == 2) {
                    // using break statement inside the inner loop
                    break;
                }
                System.out.println(i + " " + j);
            }
        }

Я знаю, что внешний l oop будет go включен.

Чего я не понимаю, так это здесь:

for (int i = 0; i < 3; i++) {
            String line = null;
            switch (a) { 
                case 0:
                    line = "Hello";
                    break;
                case 1:
                    line = "How are you?";
                    break;
                case 2:
                    line = "What are you doing?";
                    break;

Таким образом, он переходит к случаю 0, а затем прерывается, и for-l oop продолжается, почему? Я думал, что это сломает l oop, так как он не вложен. Или это из-за оператора switch - он отличается от оператора if?

И в этом случае он прекратит работу, в то время как -l oop ... Я не вижу разницы.

while(winner == false){

                input = menuInput.nextInt();

                try {
                    if(input == 0 || input >= 9){
                        System.out.println("Ungültige Nummer, versuche nochmal!");
                        break; 
                    }

Ответы [ 3 ]

2 голосов
/ 03 февраля 2020

Вы можете break a switch. Вы не можете break и if. break применяется к ближайшему утверждению, которое может быть break ed, поэтому

for (int j = 1; j <= 3; j++) {
    if (i == 2 && j == 2) {
        // using break statement inside the inner loop
         break;
    }
    System.out.println(i + " " + j);
}

Здесь break относится к for.

В то время как здесь:

for (int i = 0; i < 3; i++) {
    String line = null;
    switch (a) { 
        case 0:
            line = "Hello";
            break;

Относится к switch.

Заявления, которые могут быть break ed: for, while, do...while, switch.

Для получения дополнительной информации, вы можете увидеть spe c.

1 голос
/ 03 февраля 2020

break относится к самой внутренней вещи, которую можно сломать (без метки). В данном случае это switch - потому что поведение по умолчанию switch не выполняется. Сначала твой код. Изменение,

for (int i = 0; i < 3; i++) {
    String line = null;
    switch (a) { 
        case 0:
            line = "Hello";
            break;
        case 1:
            line = "How are you?";
            break;
        case 2:
            line = "What are you doing?";
            break;

Может быть изменено на

loop: for (int i = 0; i < 3; i++) {
    String line = null;
    switch (a) { 
        case 0:
            line = "Hello";
            break loop;
        case 1:
            line = "How are you?";
            break loop;
        case 2:
            line = "What are you doing?";
            break loop;

Теперь второе поведение будет провальным. И это может выглядеть примерно так:

switch (a) {
case 0: case 2: case 4: case 6: case 8:
    System.out.println("even < 10");
    break;
case 1: case 3: case 5: case 7: case 9:
    System.out.println("odd < 10");
    break;
}
0 голосов
/ 03 февраля 2020

В переключателе оператор break означает завершение оператора switch. Взгляните на падение через пример .

В l oop разрыв оператора означает завершение al oop.

Остановка цикла после использования примера оператора switch :

for (int i = 0; i < 3; i++) {
   Boolean shouldBreak = false;

   String line = null;
   switch (a) {
      case 0:
         line = "Hello";
         shouldBreak = true;
         break;
      case 1:
         line = "How are you?";
         shouldBreak = true;
         break;
   }

   if (shouldBreak){
      break;
   }
}
...