1. 루프 비교: forvswhile

루프 while는 명령문 또는 명령문 그룹을 여러 번 수행해야 하는 모든 곳에서 사용할 수 있습니다. 그러나 가능한 모든 시나리오 중 하나는 강조할 가치가 있습니다.

우리는 프로그래머(프로그램 작성자)가 루프를 몇 번 실행해야 하는지 미리 알고 있는 상황에 대해 이야기하고 있습니다. 이는 일반적으로 특수 카운터 변수를 선언한 다음 1루프가 반복될 때마다 변수를 증가(또는 감소)하여 처리됩니다.

모든 것이 정상적으로 작동하는 것처럼 보이지만 그리 편리하지는 않습니다. 루프 전에 카운터 변수의 초기 값을 설정합니다. 그런 다음 조건에서 이미 최종 값에 도달했는지 확인합니다. 그러나 일반적으로 루프 본문의 맨 끝에서 값을 변경합니다.

루프의 몸체가 크면 어떻게 될까요? 아니면 중첩된 루프가 여러 개인 경우? 일반적으로 이러한 경우 카운터 변수에 대한 모든 정보를 한 곳에 수집하는 것이 바람직합니다. 이것이 바로 우리가 forJava에 루프가 있는 이유입니다. 또한 매우 복잡해 보이지 않습니다.

for (statement 1; condition; statement 2)
{
   block of statements
}

루프 while는 괄호 안에 조건만 있지만 for루프는 세미콜론으로 구분된 두 개의 명령문을 추가합니다.

현실은 생각보다 간단합니다. 컴파일러는 다음과 같이 for루프를 일반 루프로 변환합니다.while

statement 1;
while (condition)
{
   block of statements
   statement 2;
}

또는 더 좋은 방법은 예를 들어 이를 보여드리겠습니다. 아래의 두 코드 스니펫은 동일합니다.

옵션 1 옵션 2
for (int i = 0; i < 20; i++)
{
   System.out.println(i);
}
int i = 0;
while (i < 20)
{
   System.out.println(i);
   i++;
}

카운터 변수 와 관련된 모든 코드를 한 곳에 모았습니다 i.

for루프 에서 명령문 1은 루프 자체가 시작되기 전에 한 번만 실행됩니다. 이것은 두 번째 코드 스니펫에서 명확하게 볼 수 있습니다.

명령문 2 는 루프 본문과 동일한 횟수로 실행되며 매번 루프 전체가 실행된 후 실행됩니다.


2. for루프가 사용되는 곳

루프 for는 아마도 Java에서 가장 많이 사용되는 루프 유형일 것입니다. 그것은 어디에서나 사용되며 프로그래머에게는 루프보다 더 명확하고 편리합니다 while. 거의 모든 while루프를 루프로 변환할 수 있습니다 for.

예:

while 루프 for 루프
int i = 3;
while (i >= 0)
{
   System.out.println(i);
   i--;
}
for (int i = 3; i >= 0; i--)
{
   System.out.println(i);
}
int i = 0;
while (i < 3)
{
   System.out.println(i);
   i++;
}
for (int i = 0; i < 3; i++)
{
   System.out.println(i);
}
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
for (boolean isExit = false; !isExit; )
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
while (true)
   System.out.println("C");
for (; true; )
   System.out.println("C");
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
      break;
}
for (; true; )
{
   String s = console.nextLine();
   if (s.equals("exit"))
      break;
}

마지막 예에 주목하십시오. 루프 카운터 작업을 위한 명령문이 누락되었습니다. 카운터도 없고 진술도 없습니다.

루프 에서 forJava는 "카운터를 초기화하는 명령문"과 "카운터를 업데이트하는 명령문"을 생략할 수 있습니다. 루프 조건을 정의하는 표현식도 생략할 수 있습니다.



for3. 루프 사용의 뉘앙스

for루프 및 breakcontinue문 사용에 대한 중요한 사항입니다 .

break루프 의 명령문은 루프 for에서와 동일하게 작동합니다 while. 루프를 즉시 종료합니다. 명령문 continue은 루프 본문을 건너뛰지만 statement 2루프 카운터를 변경하지는 않습니다.

for루프 와 루프가 어떻게 관련되어 있는지 다시 살펴보겠습니다 while.

for (statement 1; condition; statement 2)
{
   block of statements
}
statement 1;
while (condition)
{
   block of statements
   statement 2;
}

continuefor문이 루프 에서 실행되면 나머지 문 블록은 건너뛰지만 문 2 (루프의 카운터 변수와 함께 작동하는 문 for)는 계속 실행됩니다.

7로 나눌 수 있는 숫자를 건너뛰는 예제로 돌아가 봅시다.

이 코드는 영원히 반복됩니다 이 코드는 잘 작동합니다
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0) continue;
   System.out.println(i);
   i++;
}
for (int i = 1; i <= 20; i++)
{
   if ( (i % 7) == 0) continue;
   System.out.println(i);
}

루프 를 사용하는 코드는 while작동하지 않습니다 — i는 7보다 크지 않습니다. 그러나 for루프가 있는 코드는 잘 작동합니다.



4. for 루프 비교: Java와 Pascal

그건 그렇고, Pascal에도 For루프가 있습니다. 일반적으로 본질적으로 모든 프로그래밍 언어에는 하나가 있습니다. 그러나 파스칼에서는 매우 명확합니다. 예:

파스칼 자바
For i := 1 to 10 do
Begin
   Writeln(i);
End;
for (int i = 1; i <= 10; i++)
{
   System.out.println(i);
}
For i := 1 to 10 do step 2
Begin
   Writeln(i);
End;
for (int i = 1; i <= 10; i = i + 2)
{
   System.out.println(i);
}
For i := 10 downto 0 do step 2
Begin
   Writeln(i);
End;
for (int i = 10; i >= 0; i = i - 2)
{
   System.out.println(i);
}