자바 루프

자바 루프
GfG Practice에서 사용해 보세요. 진전

프로그래밍의 루프를 사용하면 일련의 명령이 조건에 따라 여러 번 실행될 수 있습니다. Java에는 아래에 설명된 세 가지 유형의 루프가 있습니다.

1. for 루프

for 루프는 반복 횟수를 알 때 사용됩니다(작업을 몇 번 반복할지 알고 있음). for 문에는 초기화 조건과 증가/감소가 한 줄에 포함됩니다. 

예: 아래 Java 프로그램은 한 줄에 0부터 10까지의 숫자를 인쇄하는 for 루프를 보여줍니다.

Java
   // Java program to demonstrates the working of for loop   import     java.io.*  ;   class   Geeks     {      public     static     void     main  (  String  []     args  )      {      for     (  int     i     =     0  ;     i      <=     10  ;     i  ++  )     {      System  .  out  .  print  (  i     +     ' '  );      }      }   }   

산출
0 1 2 3 4 5 6 7 8 9 10  

통사론:

for (초기화; 조건; 증가/감소) {

//실행할 코드

}

아래 이미지는 for 루프의 순서도를 보여줍니다.

While 루프for 루프의 흐름도
  • 초기화 조건 : 여기서는 사용 중인 변수를 초기화합니다. for 루프의 시작을 표시합니다. 이미 선언된 변수를 사용할 수도 있고 변수를 로컬로 선언하여 루프 전용으로 사용할 수도 있습니다.
  • 테스트 조건: 루프의 종료 조건을 테스트하는 데 사용됩니다. 부울 값을 반환해야 합니다. 루프 문을 실행하기 전에 조건을 확인하므로 진입 제어 루프이기도 합니다.
  • 명령문 실행 : 조건이 true로 평가되면 루프 본문의 명령문이 실행됩니다.
  • 증가/감소 : 다음 반복을 위해 변수를 업데이트하는 데 사용됩니다.
  • 루프 종료 :조건이 거짓이 되면 루프가 종료되어 수명 주기가 종료됩니다.

메모 : 다음과 같은 또 다른 형태의 for 루프가 있습니다. 향상된 for 루프 또는 (각 루프마다).

향상된 for 루프(각각)

이 루프는 배열이나 컬렉션을 반복하는 데 사용됩니다.

: 아래 Java 프로그램은 배열을 반복하고 이름을 인쇄하는 향상된 for 루프(각 루프에 대해)를 보여줍니다.

Java
   // Java program to demonstrate    // the working of for each loop   import     java.io.*  ;   class   Geeks     {      public     static     void     main  (  String  []     args  )      {      String  []     names     =     {     'Sweta'       'Gudly'       'Amiya'     };      for     (  String     name     :     names  )     {      System  .  out  .  println  (  'Name: '     +     name  );      }      }   }   

산출
Name: Sweta Name: Gudly Name: Amiya  

통사론:

for (dataType 변수 : arrayOrCollection) {

//실행할 코드

}

2. while 루프

while 루프는 루프 본문을 실행하기 전에 조건을 확인하고 싶을 때 사용됩니다.

예: 아래 Java 프로그램은 한 줄에 0부터 10까지의 숫자를 인쇄하는 while 루프를 보여줍니다.

Java
   // Java program to demonstrates    // the working of while loop   import     java.io.*  ;   class   Geeks     {      public     static     void     main  (  String  []     args  )      {      int     i     =     0  ;      while     (  i      <=     10  )     {      System  .  out  .  print  (  i     +     ' '  );      i  ++  ;      }      }   }   

산출
0 1 2 3 4 5 6 7 8 9 10  

통사론:

동안(조건) {

//실행할 코드

}

아래 이미지는 while 루프의 흐름도를 보여줍니다.

Do while 루프while 루프의 흐름도
  • While 루프는 부울 조건을 확인하면서 시작됩니다. true로 평가되면 루프 본문 문이 실행되고 그렇지 않으면 루프 다음의 첫 번째 문이 실행됩니다. 이러한 이유로 진입 제어 루프라고도 합니다.
  • 조건이 true로 평가되면 루프 본문의 명령문이 실행됩니다. 일반적으로 명령문에는 다음 반복을 위해 처리되는 변수에 대한 업데이트 값이 포함됩니다.
  • 조건이 거짓이 되면 루프가 종료되어 수명 주기가 종료됩니다.

3. do-while 루프

do-while 루프는 코드 블록이 실행되도록 보장합니다. 적어도 한 번은 상태를 확인하기 전에

: 아래 Java 프로그램은 한 줄에 0부터 10까지의 숫자를 인쇄하는 do-while 루프를 보여줍니다.

Java
   // Java program to demonstrates    // the working of do-while loop   import     java.io.*  ;   class   Geeks     {      public     static     void     main  (  String  []     args  )      {      int     i     =     0  ;      do     {      System  .  out  .  print  (  i     +     ' '  );      i  ++  ;      }     while     (  i      <=     10  );      }   }   

산출
0 1 2 3 4 5 6 7 8 9 10  

통사론:

하다 {

//실행할 코드

} while(조건);

아래 이미지는 do-while 루프의 흐름도를 보여줍니다.

do-while 루프의 흐름도
  • do while 루프는 명령문 실행과 함께 시작됩니다. 처음에는 어떤 조건도 확인하지 않습니다.
  • 명령문을 실행하고 변수 값을 업데이트한 후 조건의 참 또는 거짓 값이 확인됩니다. true로 평가되면 루프의 다음 반복이 시작됩니다.
  • 조건이 거짓이 되면 루프가 종료되어 수명 주기가 종료됩니다.
  • do-while 루프는 조건을 확인하기 전에 해당 명령문을 최소한 한 번 실행하므로 종료 제어 루프의 예라는 점에 유의하는 것이 중요합니다.

일반적인 루프 실수와 이를 방지하는 방법

루프가 올바르게 사용되지 않으면 코드 성능 가독성과 기능에 영향을 미치는 함정과 버그가 발생할 수 있습니다. 다음은 루프의 몇 가지 일반적인 함정입니다.

1. 무한 루프

이것은 모든 종류의 루핑을 구현할 때 가장 흔한 실수 중 하나입니다. 루프가 무한 시간 동안 실행되기 때문에 종료되지 않을 수 있다는 것입니다. 어떤 이유로 조건이 실패할 때 발생합니다.

무한 루프의 유형:

  • 무한 for 루프
  • 무한 while 루프

예: 여기서 두 예제 모두 무한 루프를 보여줍니다.

Infinite For Loop
   // Java program to demonstrate    // the infinite for loop   import     java.io.*  ;   class   Geeks     {      public     static     void     main  (  String  []     args  )      {      for     (  int     i     =     0  ;     i      <     5  ;     i  --  )     {      System  .  out  .  println  (      'This loop will run forever'  );      }      }   }   
Infinite While Loop
   // Java Program to demonstrate    // the infinite while loop   import     java.io.*  ;   class   Geeks     {      public     static     void     main  (  String  []     args  )      {      while  (  true  )      {      System  .  out  .  println  (      'Basic example of infinte loop'  );      }      }   }   

산출: 위 코드를 모두 실행하면 TLE(Time Limit Exceeded) 오류가 발생합니다.

2. 개별 오류

Off-by-One 오류는 루프가 원하는 것보다 한 번 더 또는 한 번 더 적게 실행될 때 발생합니다. 기본적으로 루프 조건이 올바르게 설정되지 않았을 때 발생합니다.

: 아래 Java 프로그램은 루프가 6번 실행되고 우리는 루프가 5번 실행될 것으로 예상하는 Off-by-One 오류를 보여줍니다.

Java
   // Java Program to demonstrates Off-by-One Errors   import     java.io.*  ;   class   Geeks     {      public     static     void     main  (  String  []     args  )      {      for     (  int     i     =     0  ;     i      <=     5  ;     i  ++  )     {      System  .  out  .  print  (  i     +     ' '  );      }      }   }   

3. 루프 내부에서 루프 변수 수정하기

루프 내에서 루프 조건(예: i)을 변경하면 루프가 특정 반복을 건너뛰거나 예상하지 못한 방식으로 동작할 수 있습니다. 이로 인해 오류나 예상치 못한 동작이 발생할 수 있습니다.

: 아래 Java 프로그램은 루프가 특정 반복을 건너뛰고 예기치 않게 동작하도록 하는 루프 내부의 루프 변수를 수정하는 방법을 보여줍니다.

Java
   // Java program demonstrates    // modification in i variable   import     java.io.*  ;   class   Geeks     {      public     static     void     main  (  String  []     args  )      {      for     (  int     i     =     0  ;     i      <     5  ;     i  ++  )     {      if     (  i     ==     2  )     {          // Modifies the loop variable and skips      // the next iteration      i  ++  ;      }      System  .  out  .  println  (  i  );      }      }   }   

4. 빈 루프 본체

빈 루프 본문은 반복을 위해 루프를 작성했지만 루프 내부에서 어떤 작업도 수행하지 않을 때 발생합니다. 내부에 유용한 작업 없이 루프를 실행하면 혼란스러울 수 있습니다.

예: 아래 Java 프로그램은 빈 루프 본문을 보여줍니다.

Java
   // Java program to demonstrates Empty loop body   import     java.io.*  ;   class   Geeks     {      public     static     void     main  (  String  []     args  )      {      for     (  int     i     =     0  ;     i      <     10  ;     i  ++  )     {          // Empty body no operations      }      }   }   

루프 본문이 비어 있으므로 이에 대한 출력이 생성되지 않습니다.

요약표

루프 유형

사용 시기

상태 확인

한 번 이상 실행됩니까?

for 루프

정확한 반복을 원할 때

루프 본문 이전 항목 제어라고 합니다.

아니요

while 루프

먼저 상태 확인이 필요할 때.

루프 본문 이전 항목 제어라고 합니다.

아니요

do-while 루프

한번쯤은 달려야 할 때

루프 본문 이후를 종료 제어라고 합니다.

for-each 루프

모든 수집항목을 처리하는 경우

내부적으로 처리

아니요

관련 게시물:

  • for 루프
  • while 루프
  • do-while 루프
퀴즈 만들기