logo

Java의 루프

프로그래밍 언어의 반복은 일부 조건이 true로 평가되는 동안 일련의 명령/함수를 반복적으로 실행하는 것을 용이하게 하는 기능입니다. Java는 루프를 실행하는 세 가지 방법을 제공합니다. 모든 방법은 유사한 기본 기능을 제공하지만 구문 및 조건 확인 시간이 다릅니다.

java는 세 가지 유형의 조건문을 제공합니다. 두 번째 유형은 루프 문입니다.



  • while 루프: while 루프는 주어진 부울 조건에 따라 코드가 반복적으로 실행될 수 있도록 하는 제어 흐름 문입니다. while 루프는 if 문을 반복하는 것으로 생각할 수 있습니다.

구문:

while (boolean condition) { loop statements... }>

자바








/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> >public> static> void> main (String[] args) {> >int> i=>0>;> >while> (i<=>10>)> >{> >System.out.println(i);> >i++;> >}> >}> }>

>

>

산출

0 1 2 3 4 5 6 7 8 9 10>
  • 흐름도: for-loop-in-java
    • While 루프는 부울 조건을 확인하면서 시작됩니다. true로 평가되면 루프 본문 문이 실행되고, 그렇지 않으면 루프 다음의 첫 번째 문이 실행됩니다. 이런 이유로 라고도 불린다. 진입 제어 루프
    • 조건이 true로 평가되면 루프 본문의 명령문이 실행됩니다. 일반적으로 명령문에는 다음 반복을 위해 처리되는 변수에 대한 업데이트 값이 포함됩니다.
    • 조건이 false가 되면 루프가 종료되어 수명 주기가 종료됩니다.
  • for 루프: for 루프는 루프 구조를 작성하는 간결한 방법을 제공합니다. while 루프와 달리 for 문은 한 줄에서 초기화, 조건 및 증가/감소를 사용하므로 더 짧고 디버그하기 쉬운 루프 구조를 제공합니다.

통사론:

for (initialization condition; testing condition;increment/decrement) { statement(s) }>

자바




/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> >public> static> void> main (String[] args) {> >for> (>int> i=>0>;i<=>10>;i++)> >{> >System.out.println(i);> >}> >}> }>

>

>

산출

배열 c의 문자열
0 1 2 3 4 5 6 7 8 9 10>
  • 흐름도:
    하는 동안
      초기화 조건 : 사용중인 변수를 초기화합니다. for 루프의 시작을 표시합니다. 이미 선언된 변수를 사용하거나 변수를 선언할 수 있으며, 로컬에서는 루프에만 사용할 수 있습니다. 테스트 조건: 루프의 종료 조건을 테스트하는 데 사용됩니다. 부울 값을 반환해야 합니다. 그것은 또한 출입 통제 루프 루프 문을 실행하기 전에 조건을 확인하기 때문입니다. 명령문 실행: 조건이 true로 평가되면 루프 본문의 명령문이 실행됩니다. 증가/감소: 다음 반복을 위해 변수를 업데이트하는 데 사용됩니다. 루프 종료: 조건이 거짓이 되면 루프가 종료되어 수명 주기가 종료됩니다.
  • 하는 동안: do while 루프는 while 루프와 유사하지만 명령문을 실행한 후 조건을 확인한다는 점만 다릅니다. 제어 루프를 종료합니다.

통사론:

do { statements.. } while (condition);>

자바




김프 배경 삭제
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> >public> static> void> main (String[] args) {> >int> i=>0>;> >do> >{> >System.out.println(i);> >i++;> >}>while>(i<=>10>);> >}> }>

>

>

산출

0 1 2 3 4 5 6 7 8 9 10>
  • 흐름도:
    • do while 루프는 명령문 실행으로 시작됩니다. 처음에는 어떤 조건도 확인하지 않습니다.
    • 명령문을 실행하고 변수 값을 업데이트한 후 조건이 참인지 거짓인지 확인합니다. true로 평가되면 다음 루프 반복이 시작됩니다.
    • 조건이 false가 되면 루프가 종료되어 수명 주기가 종료됩니다.
    • do-while 루프는 조건을 확인하기 전에 해당 명령문을 한 번 이상 실행하므로 종료 제어 루프의 예라는 점에 유의하는 것이 중요합니다.

루프의 함정

    무한 루프: 모든 종류의 루핑을 구현할 때 가장 흔히 저지르는 실수 중 하나는 종료되지 않을 수 있다는 것입니다. 즉, 루프가 무한 시간 동안 실행됩니다. 어떤 이유로 조건이 실패할 때 발생합니다. 예: 무한 for 루프:

자바




/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> >public> static> void> main(String[] args)> >{> >for> (;;) {> >}> >}> }>

>

>

무한 while 루프:

자바




/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> >public> static> void> main (String[] args) {> >while> (>true>)> >{> >// statement> >}> > >}> }>

테스트 유형
>

>

자바




//Java program to illustrate various pitfalls.> public> class> LooppitfallsDemo> {> >public> static> void> main(String[] args)> >{> >// infinite loop because condition is not apt> >// condition should have been i>0.> >for> (>int> i =>5>; i !=>0>; i -=>2>)> >{> >System.out.println(i);> >}> >int> x =>5>;> >// infinite loop because update statement> >// is not provided.> >while> (x ==>5>)> >{> >System.out.println('In the loop');> >}> >}> }>

>

>

또 다른 함정은 루프를 통해 컬렉션 개체에 무언가를 추가할 수 있고 메모리가 부족할 수 있다는 것입니다. 아래 프로그램을 실행하려고 하면 잠시 후 메모리 부족 예외가 발생합니다.

자바




//Java program for out of memory exception.> import> java.util.ArrayList;> public> class> Integer1> {> >public> static> void> main(String[] args)> >{> >ArrayList ar =>new> ArrayList();> >for> (>int> i =>0>; i { ar.add(i); } } }>

>

>

산출:

Exception in thread 'main' java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Unknown Source) at java.util.Arrays.copyOf(Unknown Source) at java.util.ArrayList.grow(Unknown Source) at java.util.ArrayList.ensureCapacityInternal(Unknown Source) at java.util.ArrayList.add(Unknown Source) at article.Integer1.main(Integer1.java:9)>

중첩 루프:

중첩 루프는 다른 루프 문 안에 있는 루프 문을 의미합니다.

루프를 사용하여 다양한 조합이 있습니다. ~을 위한 고리, ~하는 동안 고리, 하는 동안 고리.

예제 1 중첩된 for 루프

자바




/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> >public> static> void> main (String[] args) {> >for>(>int> i =>0>; i <>3>; i++){> >for>(>int> j =>0>; j <>2>; j++){> >System.out.println(i);> >}> >System.out.println();> >}> >}> }>

>

>

산출

0 0 1 1 2 2>

예제 2 중첩된 while 루프

자바




스위치 문 자바
import> java.io.*;> class> GFG {> >public> static> void> main(String[] args)> >{> >int> i =>1>, j =>1>;> >while> (i <=>3>) {> >while> (j <=>3>) {> >System.out.print(j);> >j++;> >}> >i++;> >System.out.println(>''>);> >j =>1>;> >}> >}> }>

>

>

산출

123 123 123>

예제 3 중첩된 do while 루프

자바




/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> >public> static> void> main(String[] args)> >{> >int> row =>1>, column =>1>;> >int> x;> >do> {> >x =>4>;> >do> {> >System.out.print(>''>);> >x--;> >}>while> (x>= 행);> >column =>1>;> >do> {> >System.out.print(column +>' '>);> >column++;> >}>while> (column <=>5>);> >System.out.println(>' '>);> >row++;> >}>while> (row <=>5>);> >}> }>

>

.다음 자바
>

산출

1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5>

예제 4 중첩된 while 및 for 루프

자바




/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> >public> static> void> main(String[] args)> >{> >int> weeks =>3>;> >int> days =>7>;> >int> i =>1>;> >// outer loop> >while> (i <= weeks) {> >System.out.println(>'Week: '> + i);> >// inner loop> >for> (>int> j =>1>; j <= days; ++j) {> >System.out.println(>' Days: '> + j);> >}> >++i;> >}> >}> }>

>

>

산출

Week: 1 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7 Week: 2 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7 Week: 3 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7>