[java] 실행문 반복 for, while 구문

반복문

특정 조건을 만족하는 동안 실행문을 반복되도록 하는 for 문과 while 문에 대해 알아봅니다.

🧩1. for문 구조

for (변수선언; 조건식; 증감식) { 실행문 }

  • for 문은 변수가 조건을 만족하는 동안 증감하면서 실행됩니다.
  • for 문안에 선언되는 변수, 조건식은 ;(세미콜론)으로 닫아줘야합니다. 
    • 변수 증감식 뒤에는 ;(세미콜론)을 사용하지 않습니다.
  • 실행문은 { } 대괄호로 감쌉니다.
  • 실행 순서는 1회차는 초기 변수 선언 ➡️ 조건식 ➡️ 실행문 입니다
  • 2회차 부터는 증감식 ➡️ 조건식 ➡️ 실행문  ↩️ 반복 실행됩니다.
public class ForTest1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int sum = 0;
		for (int i = 1; i <= 100; i++) {
			sum += i;
		}
		System.out.println(sum);

	}

}
  

🧩2. for문 사용 예시

for문 변수 증감과 연산

  • for 문이 1~9까지 반복되는 동안 숫자 2와 곱셈을 연산하고 출력합니다.
public class ForTest1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int sum = 0;
		for (int i = 1; i <= 100; i++) {
			sum += i;
		}
		System.out.println(sum);

	}

}

#출력된 값
2x1=2
2x2=4
2x3=6
2x4=8
2x5=10
2x6=12
2x7=14
2x8=16
2x9=18

  • for 문을 중첩하여 2~9단까지 출력합니다.
    • print 문은 옆으로 출력이되고, println문은 줄바꿈이 일어납니다. 
    • \t는 tab 탭만큼 간격을 띄어 출력합니다.
public class ForTest2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		for (int i = 2; i <= 9; i++) {

			System.out.println(i + "단");

			for (int j = 1; j <= 9; j++) {

				int multi = i * j;

				System.out.print(i + "x" + j + "=" + multi + "\t");

			}
			System.out.println();
			System.out.println();
		}

	}

}

#출력된 값
2단
2x1=2	2x2=4	2x3=6	2x4=8	2x5=10	2x6=12	2x7=14	2x8=16	2x9=18	

3단
3x1=3	3x2=6	3x3=9	3x4=12	3x5=15	3x6=18	3x7=21	3x8=24	3x9=27	

4단
4x1=4	4x2=8	4x3=12	4x4=16	4x5=20	4x6=24	4x7=28	4x8=32	4x9=36	

5단
5x1=5	5x2=10	5x3=15	5x4=20	5x5=25	5x6=30	5x7=35	5x8=40	5x9=45	

6단
6x1=6	6x2=12	6x3=18	6x4=24	6x5=30	6x6=36	6x7=42	6x8=48	6x9=54	

7단
7x1=7	7x2=14	7x3=21	7x4=28	7x5=35	7x6=42	7x7=49	7x8=56	7x9=63	

8단
8x1=8	8x2=16	8x3=24	8x4=32	8x5=40	8x6=48	8x7=56	8x8=64	8x9=72	

9단
9x1=9	9x2=18	9x3=27	9x4=36	9x5=45	9x6=54	9x7=63	9x8=72	9x9=81

  • 구구단을 세로로 보기 좋게 출력합니다.
public class ForTest2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		for (int i = 1; i <= 9; i++) {

			for (int j = 2; j <= 9; j++) {

				int multi = i * j;

				System.out.print(j + "x" + i + "=" + multi + "\t");

			}
			System.out.println();
		}

	}

}
#출력된 값
2x1=2	3x1=3	4x1=4	5x1=5	6x1=6	7x1=7	8x1=8	9x1=9	
2x2=4	3x2=6	4x2=8	5x2=10	6x2=12	7x2=14	8x2=16	9x2=18	
2x3=6	3x3=9	4x3=12	5x3=15	6x3=18	7x3=21	8x3=24	9x3=27	
2x4=8	3x4=12	4x4=16	5x4=20	6x4=24	7x4=28	8x4=32	9x4=36	
2x5=10	3x5=15	4x5=20	5x5=25	6x5=30	7x5=35	8x5=40	9x5=45	
2x6=12	3x6=18	4x6=24	5x6=30	6x6=36	7x6=42	8x6=48	9x6=54	
2x7=14	3x7=21	4x7=28	5x7=35	6x7=42	7x7=49	8x7=56	9x7=63	
2x8=16	3x8=24	4x8=32	5x8=40	6x8=48	7x8=56	8x8=64	9x8=72	
2x9=18	3x9=27	4x9=36	5x9=45	6x9=54	7x9=63	8x9=72	9x9=81	

  • 1부터 순차적으로 더해서 처음으로 합계가 20을 넘을 때 합계와 회차를 출력할 수 있습니다.
import java.util.Scanner;

public class ControlTest3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int sum = 0, i;
		int target = 20;
		for (i = 1; sum < target; i++) {
			sum += i;
		}
		System.out.println("sum =" + sum + ", i=" + (i - 1));
	}

}
#출력된 값
sum =21, i=6
	

  • 사용자로 부터 입력 받은 수의 합이 목표값(target)을 넘을때 합계와 회차를 출력합니다.
import java.util.Scanner;

public class ControlTest3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String input = sc.nextLine();
		int count = Integer.parseInt(input);
		int sum = 0;
		int target = 20;
		for (int i = 1; i < count; i++) {
			sum += i;
			if (sum >= target) {
				System.out.println("sum =" + sum + ", i=" + i);
				// break;
			}
		}
		System.out.println("종료");

	}

}
#출력된 값
20
sum =21, i=6
sum =28, i=7
sum =36, i=8
sum =45, i=9
sum =55, i=10
sum =66, i=11
sum =78, i=12
sum =91, i=13
sum =105, i=14
sum =120, i=15
sum =136, i=16
sum =153, i=17
sum =171, i=18
sum =190, i=19
종료
	

  • 홀수는 양수(1), 짝수는 음수(-2)일때 순차적 합계가 처음 100이 될 때의 회차를 구하는 식입니다.
public class ControlTest6 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int sum = 0, i;
		for (i = 1; sum < 100; i++) {

			if (i % 2 == 0) {
				sum += i * (-1);
			} else {
				sum += i;
			}
		}
		System.out.println("sum =" + sum + ", i=" + (i - 1));
	}

}

#출력된 값
sum =100, i=199
	

🧩3. While문 구조

while (조건식) { 실행문; 변수 증감; }

  • while 문 또한 변수가 조건을 만족하는 동안 증감하면서 실행됩니다.
  • 단 변수의 증감은 실행문 내에서 이루어집니다.
  • 실행문과 변수 증감은 모두 ;(세미콜론)으로 닫아줘야합니다.
public class WhileTest1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int i = 1;

		while (i <= 9) {

			System.out.println(i);

			i++;
		}

	}

}


🧩4. While문 사용 예시

while문 실행과 변수의 증감

  • while 문을 중첩하여 2~9단까지 출력합니다.
  • 실행문이 끝나는 지점에서 (i++, j++) 변수를 증가시켜줍니다.
public class WhileTest2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int j, i = 1;

		while (i <= 9) {
			j = 2;
			while (j <= 9) {

				int multi = i * j;

				System.out.print(j + "x" + i + "=" + multi + "\t");
				j++;
			}
			i++;
			System.out.println();
		}

	}

}
#출력된 값
2x1=2	3x1=3	4x1=4	5x1=5	6x1=6	7x1=7	8x1=8	9x1=9	
2x2=4	3x2=6	4x2=8	5x2=10	6x2=12	7x2=14	8x2=16	9x2=18	
2x3=6	3x3=9	4x3=12	5x3=15	6x3=18	7x3=21	8x3=24	9x3=27	
2x4=8	3x4=12	4x4=16	5x4=20	6x4=24	7x4=28	8x4=32	9x4=36	
2x5=10	3x5=15	4x5=20	5x5=25	6x5=30	7x5=35	8x5=40	9x5=45	
2x6=12	3x6=18	4x6=24	5x6=30	6x6=36	7x6=42	8x6=48	9x6=54	
2x7=14	3x7=21	4x7=28	5x7=35	6x7=42	7x7=49	8x7=56	9x7=63	
2x8=16	3x8=24	4x8=32	5x8=40	6x8=48	7x8=56	8x8=64	9x8=72	
2x9=18	3x9=27	4x9=36	5x9=45	6x9=54	7x9=63	8x9=72	9x9=81

  • 같은 방법으로 사용자로부터 입력을 받아 *(아스타)키를 가로 세로 같은 수만큼 출력할 수 있습니다.
import java.util.Scanner;

public class ContolTest1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String input = sc.nextLine();
		int count = Integer.parseInt(input);
		int i = 1;
		while (i <= count) {
			int j = 1;
			while (j <= count) {
				System.out.print("*");
				j++;
			}
			i++;
			System.out.println();
		}

	}

}
#출력된 값
5
*****
*****
*****
*****
*****

  • 입력은 수만큼 *(아스타)키로 삼각형을 만들 수 있습니다.
import java.util.Scanner;

public class ContolTest1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String input = sc.nextLine();
		int count = Integer.parseInt(input);
		int i = 1;
		int k = count;
		while (i <= count) {
			while (k <= count) {
				System.out.print("*");
				k++;
			}
			k = count - i;
			i++;
			System.out.println();
		}

	}

}
#출력된 값
5
*
**
***
****
*****

  • 같은 방법으로  *(아스타)키로 역 삼각형을 만들 수 있습니다.
import java.util.Scanner;

public class ContolTest1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String input = sc.nextLine();
		int count = Integer.parseInt(input);
		int i = 0;
		int k = 0;
		while (i <= count) {
			while (k <= count) {
				System.out.print("*");
				k++;
			}
			k = i + 1;
			i++;
			System.out.println();
		}

	}

}
#출력된 값
5
******
*****
****
***
**
*

  • 이번에는 *(아스타)키로 반전된(공백으로 채워진) 삼각형을 만들 수 있습니다.
import java.util.Scanner;

public class ContolTest1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String input = sc.nextLine();
		int count = Integer.parseInt(input);
		int i = 1;
		int j = 1;
		int k = count;
		while (i <= count) {
			// 공백 반복
			while (j < count) {
				System.out.print(" ");
				j++;
			}

			// 아스카 반복
			while (k <= count) {
				System.out.print("*");
				k++;
			}
			k = count - i;
			j = i + 1;
			i++;
			System.out.println();
		}

	}

}
#출력된 값
10
         *
        **
       ***
      ****
     *****
    ******
   *******
  ********
 *********
**********

  • 다음과 같이 *(아스타)키로 반전된(공백으로 채워진) 삼각형을 만들 수도 있습니다.
import java.util.Scanner;

public class ContolTest2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String input = sc.nextLine();
		int count = Integer.parseInt(input);
		int i = 0;
		int j = 1;
		int k = 0;
		while (i <= count) {
			// 공백 반복
			while (j < count) {
				System.out.print(" ");
				j++;
			}

			// 아스카 반복
			while (k <= count) {
				System.out.print("*");
				k++;
			}
			k = i + 1;
			j = i + 1;
			i++;
			System.out.println();
		}

	}

}
#출력된 값
5
    *
   **
  ***
 ****
*****


🧩5. Do - While문 구조

Do { 실행문; } while (조건식); 

  • while문의 경우 조건이 만족하지 않는다면 한번도 반복하지 않을 수 있지만, do while문의 경우는 무조건 한번은 실행되는 반복문입니다.
  • 즉, do 실행문을 실행한 후 그 결과에 따르 while 문을 실행할지 여부를 결정할 때 사용합니다.
  • while(조건식) 뒤에 ;(세미콜론)으로 닫아줍니다.
import java.util.Scanner;

public class DoWhileExam {

	public static void main(String[] args) {
		int value = 0;

		// Scanner는 java.util 패키지에 있는 클래스로써 키보드로 부터 값을 입력받는다던지 할 때 유용하게 사용할 수 있는 클래스입니다.
		Scanner scan = new Scanner(System.in);
		// 위 처럼 작성하시면 키보드로부터 값을 입력받을 수 있는 Scanner객체가 생성됩니다.

		do {
			value = scan.nextInt(); // Scanner클래스를 이용하여 키보드로 부터 숫자값을 입력받습니다.
			System.out.println("입력받은 수 : " + value);
		} while (value != 10); // 입력받은 값이 10이 아닐 경우에는 계속 반복합니다.

		System.out.println("반복문 종료");
	}
}



🧩6. Do - While문 사용 예시

1회 실행 후 조건식 검사

  • 1~5까지만 입력을 받고 그 외에는 다시 입력 하도록 하는 예시 입니다.
import java.util.Scanner;

public class DoWhileTest1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int select;
		String input;
		do {
			System.out.println("input :");
			input = sc.nextLine();
			select = Integer.parseInt(input); // select 1~5만 입력가능, 아니면 다시 입력받기
		} while (select < 1 || select > 5);

		System.out.println("select : " + select);
	}

}


🧩7. Break와 Continue

조건문의 실행 여부를 결정합니다.

  • 반복문이 중첩되어 있을 경우 break; 문은 가장 가까운 반복문만 종료합니다.
  • 바깥쪽 반복문까지 종료시키려면 반복문에 이름(라벨)을 붙이고, “break 이름;” 사용합니다.
#반복문 종료
for (...) {
    
    for (...) {
               break;
               }
          }

#라벨 사용시
Label: for (...) {
                 for (...) {
                            break Label;
                           }
                 }
  • Continue문은 for문, while문, do-while문에서 사용합니다.
  • for문에서는 증감식으로 이동하고, while문과 do-while문에서는 조건식으로 이동합니다.
  • 2로 나눈 나머지가 0이 아닌 경우, 즉 홀수인 경우 for 문의 증감식으로 이동합니다. 따라서, 홀수는 출력되지 않습니다.
# 
for (int i=1; i<=10; i++) {
         if(i%2 !=0) {
            continue;
         }
      System.out.println(i)
    }


댓글 쓰기

0 댓글