JavaRush /Java Blog /Random-KO /점프 연산자
articles
레벨 15

점프 연산자

Random-KO 그룹에 게시되었습니다
Java는 세 가지 점프 연산자( breakcontinue) 를 지원합니다 return. 이는 프로그램의 다른 부분으로 제어권을 전송합니다. 각 연산자를 자세히 살펴보겠습니다. 전환 연산자 - 1

연산자 사용break

Java의 연산자는 break세 가지 경우에 사용됩니다. 먼저, 이미 본 것처럼 명령문 분기에서 명령문 시퀀스를 종료합니다 switch. 둘째, 루프를 벗어나는 데 사용할 수 있습니다. 셋째, 무조건 점프 연산자의 '문명화된' 형태로 활용될 수 있다 goto. 이 섹션에서는 마지막 두 가지 사례를 설명합니다. break루프를 종료하는 데 사용합니다 break. 을 사용하면 조건식과 루프 본문의 나머지 코드를 무시하고 루프를 강제로 즉시 종료할 수 있습니다. break루프 내에서 명령문이 발견되면 두 번째 명령문이 종료되고 프로그램 제어가 그 뒤에 오는 명령문으로 이전됩니다. 간단한 예:
// Использование break для выхода из цикла.
public class BreakLoop {

  public static void main(String[] args) {
    for (int i = 0; i < 100; i++) {
      if (i == 4) {
        break; // завершить цикл, если i = 4
      }
      System.out.println("i: " + i);
    }
    System.out.println("Цикл завершен.");
  }
}
이 프로그램은 다음과 같은 출력을 생성합니다.
i: 0
i: 1
i: 2
i: 3
Цикл завершен.
여기에서는 루프가 for0회에서 99회까지 명령문을 실행하도록 설계되었지만 연산자는 breaki가 4일 때 루프가 일찍 종료되도록 합니다 break. 연산자는 의도적인 무한 루프를 포함하여 모든 Java 루프와 함께 사용할 수 있습니다. 예를 들어, 아래는 루프를 사용하여 코딩한 이전 프로그램입니다 while. 이 프로그램의 출력은 이전 프로그램과 동일합니다.
// Использование break для выхода из while-цикла.
public class BreakLoop2 {

  public static void main(String[] args) {
    int i = 0;
    while (i < 100) {
      if (i == 4) {
        break; // закончить цикл, если i = 4
      }
      System.out.println("i: " + i);
      i++;
    }
    System.out.println("Цикл завершен.");
  }
}
중첩된 루프 집합 내에서 사용되는 경우 명령문은 break가장 안쪽 루프만 종료합니다. 예를 들어:
// Использование break во вложенных циклах.
public class BreakLoop3 {

  public static void main(String[] args) {
    for (int i = 0; i < 3; i++) {
      System.out.print("Итерация " + i + ": ");
      for (int j = 0; j < 10; j++) {
        if (j == 4) {
          break; // закончить цикл, если j = 4
        }
        System.out.print(j + " ");
      }
      System.out.println();
    }
    System.out.println("Цикл завершен.");
  }
}
이 프로그램은 다음과 같은 출력을 생성합니다.
Итерация 0: 0 1 2 3
Итерация 1: 0 1 2 3
Итерация 2: 0 1 2 3
Цикл завершен.
보시다시피, break내부 루프의 명령문은 해당 루프만 종료하게 합니다. 외부 루프는 영향을 받지 않습니다. 에 관해 두 가지 의견을 더 말씀드리겠습니다 break. 첫째, 여러 문이 루프에 나타날 수 있습니다 break. 하지만 조심하세요. 그 중 너무 많으면 코드 구조가 해체되는 경향이 있습니다. 둘째, break-statement를 종료하는 는 switch-statement에만 영향을 미치고 switch이를 포함하는 루프에는 영향을 미치지 않습니다. 논평: Break루프 종료의 일반적인 수단으로 설계되지 않았습니다. 이 목적은 루프 헤더 조건식에 의해 제공됩니다. 연산자는 break특정 특수 상황이 발생할 때만 루프를 중단하는 데 사용해야 합니다.

break양식으로 사용goto

스위치 문과 루프 에 break사용 되는 것 외에도 goto. gotoJava는 임의적이고 구조화되지 않은 방식으로 분기를 수행하기 때문에 연산자를 포함하지 않습니다 . .을 집중적으로 사용하는 코드는 goto일반적으로 이해하고 유지 관리하기 어렵습니다. 또한 일부 컴파일러 최적화를 재정의합니다. 그러나 프로그램에는 goto제어 흐름이 가치 있고 합법적인 구조가 되는 곳이 여러 군데 있습니다. 예를 들어, goto깊게 중첩된 루프 세트에서 벗어날 때 유용할 수 있습니다. 이러한 상황을 처리하기 위해 Java는 연산자의 확장된 형식을 정의합니다 break. 이를 사용하면 하나 이상의 코드 블록을 종료할 수 있습니다. 이러한 블록은 루프나 명령문의 일부일 필요는 없습니다 switch. 이것은 어떤 블록이라도 될 수 있습니다. break다음으로, 이 양식은 마크와 함께 작동하고 문제를 우회하여 의 이점을 제공하므로 실행이 계속되는 위치를 정확하게 결정할 수 있습니다 goto. 레이블이 있는 명령문 break은 다음과 같은 일반적인 형식을 갖습니다. break label; 다음은 label일부 코드 블록을 식별하는 레이블의 이름입니다. 이 양식이 break실행되면 명명된 코드 블록(레이블이 명령문에 지정되어 있음 break)에서 해당 블록 다음의 명령문으로 제어가 이전됩니다. 표시된 코드 블록은 반드시 이 명령문을 포함해야 하지만 break이 포함이 직접적일 필요는 없습니다. 즉, break자체 레이블이 있는 블록에 직접 포함될 수는 없지만 그 안에 중첩된 블록에 포함될 수도 있습니다. ). 이는 표시된 연산자를 사용하여 break중첩된 블록 집합에서 벗어날 수 있음을 의미합니다. 그러나 break. break_ 블록 이름을 지정하려면 블록 시작 부분(여는 중괄호 앞)에 레이블을 배치합니다. 레이블은 콜론이 뒤에 오는 유효한 Java 식별자입니다. 블록에 레이블을 지정한 후 해당 레이블을 연산자에 대한 인수로 사용할 수 있습니다 break. 이렇게 하면 표시된 블록의 끝부터 실행이 계속됩니다. 예를 들어, 다음 프로그램에는 각각 자체 레이블이 있는 세 개의 중첩 블록이 포함되어 있습니다. 연산자는 두 연산자를 건너뛰고 break레이블이 표시된 블록의 끝을 넘어 앞으로 이동합니다 . secondprintln()
// Использование break How цивorзованной формы goto.
public class Break {

  public static void main(String[] args) {
    boolean t = true;
    first:
    {
      second:
      {
        third:
        {
          System.out.println("Перед оператором break.");
          if (t) {
            break second; // выход из блока second
          }
          System.out.println("Данный оператор никогда не выполнится");
        }
        System.out.println("Данный оператор никогда не выполнится ");
      }
      System.out.println("Данный оператор размещен после блока second.");
    }
  }
}
이 프로그램을 실행하면 다음과 같은 출력이 생성됩니다.
Перед оператором break.
Данный оператор размещен после блока second.
레이블이 있는 연산자의 가장 일반적인 용도 중 하나는 break중첩 루프를 탈출하는 것입니다. 예를 들어, 다음 프로그램에서 외부 루프는 한 번만 실행됩니다.
// Использование break для выхода из вложенных циклов.
public class BreakLoop4 {

  public static void main(String[] args) {
    outer:
    for (int i = 0; i < 3; i++) {
      System.out.print("Итерация " + i + ": ");
      for (int j = 0; j < 100; j++) {

        if (j == 10) {
          break outer; // выйти из обоих циклов
        }
        System.out.print(j + " ");
      }
      System.out.println("Эта строка никогда не будет выведена");
    }
    System.out.println("Цикл завершен.");
  }
}
프로그램은 다음과 같은 출력을 생성합니다.
Итерация 0: 0 1 2 3 4 5 6 7 8 9 Цикл завершен.
외부 루프가 끝나기 전에 내부 루프가 중단되면 두 루프가 모두 끝나는 것을 쉽게 알 수 있습니다. break둘러싸는 블록에 대해 정의되지 않은 레이블에는 -jump를 수행할 수 없다는 점을 명심하십시오 . 예를 들어, 다음 프로그램은 유효하지 않으며 컴파일되지 않습니다.
// Эта программа содержит ошибку.
public class BreakErr {

  public static void main(String[] args) {
    one:
    for (int i = 0; i < 3; i++) {
      System.out.print("Итерация " + i + ": ");
    }
    for (int j = 0; j < 100; j++) {
      if (j == 10) {
        break one; //He верно!
      }
      System.out.print(j + " ");
    }
  }
}
1로 표시된 루프에는 명령문이 포함되어 있지 않기 때문에 break이 블록으로 제어를 전달할 수 없습니다.

연산자 사용continue

때로는 루프의 다음 반복을 일찍 시작하는 것이 유용할 때도 있습니다. 즉, 루프를 계속 실행해야 하지만 이 특정 반복에 대해 본문의 나머지 코드 처리를 중지해야 합니다. 실제로 이는 goto다음 본문 작업을 지나 루프 블록 끝까지의 전환입니다. 이 작업은 운영자가 수행합니다 continue. 루프에서 whileand do while연산자를 continue사용하면 제어가 루프를 제어하는 ​​조건식으로 직접 전송됩니다. 루프에서 for제어는 먼저 문의 반복 부분으로 전달된 for다음 조건식으로 전달됩니다. 세 개의 루프 모두에서 중간 코드가 우회됩니다. 각 줄에 두 개의 숫자를 인쇄하는 데 사용되는 예제 프로그램은 continue다음과 같습니다.
// Демонстрирует continue.
public class Continue {

  public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
      System.out.print(i + " ");
      if (i % 2 == 0) {
        continue;
      }
      System.out.println("");
    }
  }
}
이 코드는 연산 %(모듈로)을 사용하여 짝수인지 확인합니다 i. 그렇다면 개행 문자를 인쇄하지 않고 루프가 계속됩니다. 프로그램 출력:
0 1
2 3
4 5
6 7
8 9
, 연산자와 마찬가지로 break계속할 continue루프를 나타내는 레이블을 정의할 수 있습니다. continue0부터 9까지 삼각형 구구단을 인쇄하는 데 사용되는 예제 프로그램입니다 .
// Использование continue с меткой.
public class ContinueLabel {

  public static void main(String[] args) {
    outer:
    for (int i = 0; i < 10; i++) {
      for (int j = 0; j < 10; j++) {
        if (j > i) {
          System.out.println();
          continue outer;
        }
        System.out.print(" " + (i * j));
      }
    }
    System.out.println();
  }
}
이 예의 문은 를 continue평가하는 루프를 종료 j하고 에 의해 구동되는 루프의 다음 반복을 계속합니다 i. 이 프로그램의 출력:
0
 0 1
 0 2 4
 0 3 6 9
 0 4 8 12 16
 0 5 10 15 20 25
 0 6 12 18 24 30 36
 0 7 14 21 28 35 42 49
 0 8 16 24 32 40 48 56 64
 0 9 18 27 36 45 54 63 72 81
매우 드물게 유용합니다 continue. 그 이유 중 하나는 Java가 대부분의 애플리케이션에 적합한 풍부한 반복문 세트를 제공하기 때문입니다. 그러나 반복을 조기에 종료해야 하는 특별한 상황의 경우 명령문은 continue이 작업을 수행하기 위한 구조화된 방법을 제공합니다.

운영자return

마지막 제어문은 입니다 return. 이는 메서드에서 명시적으로 반환하는 데 사용됩니다. 즉, 프로그램 제어를 호출 프로그램으로 다시 전송합니다. 연산자는 return전환 연산자로 분류됩니다. 전체 논의는 방법이 논의될 때까지 기다려야 하지만 여기에서는 간략한 개요가 제공됩니다 return. 연산자는 return메소드의 어느 위치에서나 메소드를 호출하는 프로그램으로 다시 이동할 수 있습니다. 명령문은 return해당 메소드의 실행을 즉시 종료합니다. 다음 예에서는 이를 보여줍니다.
// Демонстрирует return.
public class Return {

  public static void main(String[] args) {
    boolean t = true;
    System.out.println("Перед оператором return.");
    if (t) {
      return; // возврат в вызывающую программу
    }
    System.out.println("Этот оператор никогда не выполнится.");
  }
}
return.NET Framework를 호출하는 시스템이므로 런타임 시 Java 시스템으로 반환 됩니다 main(). 이 프로그램의 출력:
Перед оператором return.
최종 문이 println()실행되지 않는 것을 볼 수 있습니다. 실행 시 return제어는 호출 프로그램으로 다시 전송됩니다. 마지막 메모입니다. 이전 프로그램에서는 if(t) 연산자가 필요했습니다. println()이것이 없으면 Java 컴파일러는 마지막 문이 절대 실행되지 않을 것임을 알기 때문에 "접근할 수 없는 코드" 오류를 발생시킵니다 . 이 오류를 방지하기 위해 (t) 연산자가 사용되며 if이 연산자는 이 데모를 위해 컴파일러를 속입니다. 원본 소스 링크: 전환 연산자
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION