제어문(2)

Brogod97·2022년 12월 9일
0

KH TIL

목록 보기
10/37
post-thumbnail

반복문

프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 특정 문장들을 반복해서 수행하도록 함

반복문의 종류

  1. for문 : 반복 횟수가 정해진 반복일 때 주로 사용

    반복 여부를 결정짓는 조건식이 처음에 제시되므로 한번도 실행이 안될 수도 있음

    for(초기식; 조건식; 증감식) {
    	수행될 코드;
    }
  2. while문 : 반복 횟수가 정해지지 않은 반복일 때 주로 사용

    반복 여부를 결정짓는 조건식이 처음에 제시되므로 한번도 실행이 안될 수도 있음

    while(조건식) {
    	수행될 코드;
    	[증감식 or 분기문];
    }
  3. do ~ while문: 반복 횟수가 정해지지 않은 반복일 때 주로 사용

    반복 여부를 결정짓는 조건식 끝(아래쪽)에 제시되므로 무조건 한번은 실행 됨


for문

for에 ~동안 이라는 뜻이 있음

즉, 조건식이 true인 동안 수행될 코드가 반복된다는 뜻

  1. for문 형태

    for(초기식; 조건식; 증감식) {
    	수행될 코드;
    }
    • 1회전
      1. 초기식 확인 후 조건식 확인
      2. 조건식이 true면 문장 수행 후 증감식 연산
      3. 조건식이 false면 수행하지 않음
    • 2회전
      1. 조건식 확인
      2. 조건식이 true면 문장 수행 후 증감식 수행
      3. 조건식이 false면 수행하지 않음
    • 2회전 이상
      1. 모두 2회전과 동일하고
      2. 조건식이 false가 나올 때까지 문장 수행
  2. for문 예시

    for(int i = 1; i <= 10; i++) {
    	System.out.println(i + “ 출력");
    }
    
    /*
    1 출력
    2 출력
    …
    9 출력
    10 출력
    */

for문 이클립스 실습

public class ForExample {
	
	/* for문
	 * - 끝이 정해져 있는(횟수가 정해져있는) 반복문
	 * - 조건에 따라 한번도 수행되지 않을 수 있음
	 * 
	 * [작성법]
	 * 
	 * for(초기식; 조건식; 증감식){
	 * 		반복 수행할 코드
	 * }
	 * 
	 * - 초기식: for문을 제어하는 용도의 변수 선언
	 * 
	 * - 조건식: for문의 반복 여부를 지정하는 식. (다음 반복 진행해?)
	 * 		   보통 초기식에 사용된 변수를 이용하여 조건식을 작성함.
	 * 
	 * - 증감식: 초기식에 사용된 변수를 
	 * 		   for문이 끝날 때 마다 증가 or 감소 시켜
	 * 		   조건식의 결과를 변하게 하는 식 
	 * */
	
	public void ex1() {
		// 1~10 출력하기
		// => 1부터 10까지 1씩 증가하며 출력
		// * 반복문은 조건식이 true일 때만 반복
		
		for(int i = 1; i <= 10; i++) { // i = index의 약자
		// 1) 초기식; 	2) 조건식;	4) 증감식
			
			// 3) 반복 수행될 코드
			System.out.println("i : " + i);
		}
	}
	
	public void ex2() {
		// 3에서 7까지 1씩 증가하며 출력
		for(int i = 3; i <= 7; i++) {
			System.out.println("i : " + i);
		}
	}
	
	public void ex3() {
		// 1부터 입력받은 수까지 1씩 증가하며 출력
		Scanner sc = new Scanner(System.in);
		
		System.out.print("입력 : ");
		int input = sc.nextInt();
		
		for(int i = 1; i <= input; i++) {
			System.out.println("출력 : " + i);
		}
	}

	public void ex4() {
		// 1.0부터 입력받은 실수 까지 0.5씩 증가하며 출력
		Scanner sc = new Scanner(System.in);
		
		System.out.print("입력 : ");
		double input = sc.nextDouble();
		
		for(double i = 1.0; i <= input; i += 0.5) {
			System.out.println("출력 : " + i);
		}
	}

	public void ex7() {
		// 영어 알파벳 A 부터 Z까지 한줄로 출력 65 ~ 90
		// ** char 자료형은? 유니코드
		// ABCD...Z
		
		for(char i = 'A'; i <= 'Z'; i++) {
			System.out.print(i);
		}
	}

	public void ex8() {
		// 응용문제!
		// 1부터 10까지 모든 정수의 합 구하기
		// => 합계 : 55
		
		int sum = 0;
		
		for(int i = 1; i <= 10; i++) {
			sum += i;
		}
		
		System.out.println("합계 : " + sum);
	}

	public void ex9() {
		// 1부터 20까지 1씩 증가하면서 출력
		// 단, 5의 배수에 ( ) 를 붙여서 출력 => 조건
		// ex) 1 2 3 4 (5) ... (20)
		
		for(int i = 1; i <= 20; i++) {
			
			if(i % 5 == 0) {
				System.out.print("(" + i + ") ");
			}else {
				System.out.print(i + " ") ;
			}

		}
	}
}

중첩 반복문

for(초기값1; 조건식1; 증감식1) {
		수행될 코드1;
		for(초기값2; 조건식2; 증감식2) {
					수행될 코드2;
				}
		수행될 코드3;
}
  1. for문에 진입하면 수행될 코드1을 먼저 수행하고 두 번째 for문에 진입하면,
  2. 조건식2가 false가 될 때까지 수행될 코드2를 수행 후 나오면,
  3. 수행될 코드3을 수행하고 조건식1로 돌아와 true면 다시 반복

중첩 for문 이클립스 실습

// 중첩 반복문 실습
	public void ex10() {
		// 구구단 모두 출력하기
		
		for(int dan = 2; dan <= 9; dan++) { // 2 ~ 9단까지 차례대로 증가
			for(int su = 1; su <+ 9; su++) { // 각 단에 곱해질 수 1 ~ 9까지 차례대로 증가
				System.out.printf("%2d X %2d = %2d", dan, su, dan*su);
			}
			System.out.println();
		} 
	}

	public void ex11() {
		// 구구단 역순 출력
		// 9단 ~ 2단까지 역방향
		// 곱해지는 수는 1~9까지
		
		for(int dan = 9; dan >= 2; dan--) { // 단 9 -> 2
			for(int su = 1; su <= 9; su++) { // 수 1 -> 9
				System.out.printf("%2d X %2d = %2d", dan, su, dan*su);
			}
			System.out.println();
		}
	}

	public void ex12() {
		// 12345
		// 12345
		// 12345
		// 12345
		// 12345
		// 이중 for문을 이용해 위처럼 출력되도록 구현
		
		for(int i = 1; i <= 5; i++) {
			for(int j = 1; j <= 5; j++) {
				System.out.print(j);
			}
			System.out.println();
		}
		
		System.out.println("---------");
		
		// 54321
		// 54321
		// 54321
		
		for(int i = 1; i <= 3; i++) {
			for(int j = 5; j >= 1; j--) {
				System.out.print(j);
			}
			System.out.println();
		}
	}

public void ex13() {
		// 1
		// 12
		// 123
		// 1234
		// ==========
		// 4321
		// 321
		// 21
		// 1
		for(int i = 1; i <= 4; i++) {
			for(int j = 1; j <= i; j++) {
				System.out.print(j);
			}
			System.out.println();
		}
		
		System.out.println("==========");
		
		for(int i = 4; i >= 1; i--) { // >= 쓸 때, 우측 값이 최저 값이 됨 (break 역할)
			for(int j = i; j >= 1; j--) {
				System.out.print(j);
			}
			System.out.println();
		}
		
	}

while문

while(조건식) {
	수행될 코드;
	[증감식 or 분기문];
}
  1. 조건식이 true일 때 문장 수행

  2. 문장 수행이 끝나면 조건식 다시 확인 후

    true면 수행, 조건식이 false가 될 때까지 수행

  3. 조건식이 false가 되면 반복문 종료

  • { } 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요 → 무한 루프 방지

while 문 예시

int i = 1;
while(i <= 10) {
	System.out.println(i + " 출력");
	i++; // 시험
}

/*
1 출력
2 출력
…
9 출력
10 출력
*/

while문 이클립스 실습

package edu.kh.control.loop;

import java.util.Scanner;

public class WhileExample {
	/* while문
	 * - 별도의 초기, 증감식이 존재하지 않고
	 *   반복 종료 조건을 자유롭게 설정하는 반복문
	 *   
	 * ** 확실히 언제 반복이 끝날지는 모르지만
	 * 	  언젠가 반복 조건이 false가 되는 경우 반복을 종료함
	 *
	 * [작성법]
	 * while( 조건식 ) {
	 * 		조건식이 true일 동안 반복 수행될 구문
	 * }
	 * 
	 * */
	
	public void ex1() {
		Scanner sc = new Scanner(System.in);
		int input = 0;
		
		while(input != 9) { // input이 9가 아닐 때 반복
			System.out.println("========키오스크=========");
			System.out.println("========메뉴선택=========");
			System.out.println("1. 떡볶이");
			System.out.println("2. 김밥");
			System.out.println("3. 쫄면");
			System.out.println("9. 종료");
			
			System.out.print("메뉴 선택 >> ");
			input = sc.nextInt();
			
			switch(input) {
			case 1: System.out.println("떡볶이 주문 완료"); break;
			case 2: System.out.println("김밥 주문 완료"); break;
			case 3: System.out.println("쫄면 주문 완료"); break;
			case 9: System.out.println("키오스크를 종료합니다!"); break;
			default: System.out.println("잘못 입력 하셨습니다.");
			}
		}
	}
}

💡 이클립스 빨간색, 초록색, 노란색 등 하이라이트 생길 때, Coverage 창에서 X가 두개 겹쳐진 아이콘을 눌러주면 됨


do ~ while

do {
	수행될 코드;
	[증감식 or 분기문];
} while(조건식);

do 안의 내용 먼저 실행

조건식 확인 후 true면 문장 수행, false면 종료

while 뒤에 ; 꼭 필요

  • { } 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요
  • whiledo~while의 차이점 do~while은 조건문이 true가 아니더라도 무조건 한 번 이상 수행

while문 예시

int i = 1;
do {
	System.out.println(i + "출력");
	i++;
} while(i <= 10);

/*
1 출력
2 출력
…
9 출력
10 출력
*/

do while 이클립스 실습

public void ex4() {
		Scanner sc = new Scanner(System.in);
		
		int input = 0;
		int sum = 0;
		
		// do ~ while은 최소 한번은 수행함
		
		do {
			System.out.print("정수: ");
			input = sc.nextInt();
			
			sum += input;
		} while(input != 0);
		
		System.out.println("합계: " + sum);
	}

3. 분기문

break

반복문에서는 break문 자신이 포함된 가장 가까운 반복문을 빠져나가는 구문

break 예시

for(int i = 1;; i++) { // 제일 가까운 반복문
	System.out.println(i + " 출력");

	if(i >= 10) {
		break;
	}
}

→ 좀 억지스럽지만, break 보여주려고 만든 예시


break문 이클립스 실습

package edu.kh.control.branch;

public class BranchExample {
	public void ex1() {
		// 1부터 10까지 1씩 증가하며 출력하는 반복문 작성 (for문 사용)
		// 단, 5를 출력하면 반복문을 멈춤 (if)
		
		for(int i = 1; i <= 10; i++) {
			System.out.println(i);
			
			if(i == 5) {
				break;
			}
		}
	}

	public void ex2() {
		// 0이 입력될 때 까지 모든 정수 합 구하기
		Scanner sc = new Scanner(System.in);
		
		int input = 0;
		int sum = 0;
		
		while(true) {
			System.out.print("정수입력: ");
			input = sc.nextInt();
			
			if(input == 0) {
				break;
			}
			sum += input;
		}
		
		System.out.println("합계: " + sum);
	}
}

중첩 반복문에서의 break

for(초기값1; 조건식1; 증감식1) {
	수행될 코드1;
	for(초기값2; 조건식2; 증감식2) {
		수행될 코드2;
		break;
	}
	수행될 코드3;
	[break;]
}

두 번째 for문에 break를 만날 경우 반복문을 나가 수행될 코드3을 수행 후 다시 첫 번째 for문을 실행하지만

마지막 break가 있다면 수행될 코드3을 수행 후 for문을 완전히 빠져나감


continue

반복문 내에서만 사용 가능하며

반복문 실행 시 continue 아래 부분은 실행하지 않고 반복문 다시 실행

for문의 경우 증감식으로 이동, while(do~while)문의 경우 조건식으로 이동

전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용

continue 예시

for(int i = 1; i <= 10; i++) {
	if(i % 2 == 0) {
		continue;
	}
	System.out.println(i + " 출력");
}

→ 홀수만 출력됨


continue 이클립스 실습

public void ex3() {
		// break: 반복문을 바로 멈춤
		// continue: 다음 반복으로 넘어감
		
		// 3의 배수 제외하고 1~10까지 출력
		for(int i = 1; i <= 10; i++) {
			if(i % 3 == 0) {
				continue;
			}
			System.out.print(i + " ");
		}
	}

break, continue 혼합 실습

package edu.kh.control.branch;

import java.util.Scanner;

public class BranchExample {
	public void ex1() {
		// 1부터 10까지 1씩 증가하며 출력하는 반복문 작성 (for문 사용)
		// 단, 5를 출력하면 반복문을 멈춤 (if)
		
		for(int i = 1; i <= 10; i++) {
			System.out.println(i);
			
			if(i == 5) {
				break;
			}
		}
	}

	public void ex2() {
		// 0이 입력될 때 까지 모든 정수 합 구하기
		Scanner sc = new Scanner(System.in);
		
		int input = 0;
		int sum = 0;
		
		while(true) {
			System.out.print("정수입력: ");
			input = sc.nextInt();
			
			if(input == 0) {
				break;
			}
			sum += input;
		}
		
		System.out.println("합계: " + sum);
	}

	public void ex3() {
		// break: 반복문을 바로 멈춤
		// continue: 다음 반복으로 넘어감
		
		// 3의 배수 제외하고 1~10까지 출력
		for(int i = 1; i <= 10; i++) {
			if(i % 3 == 0) {
				continue;
			}
			System.out.print(i + " ");
		}
	}

	public void ex4() {
		// 1~100까지 1씩 증가하며 출력하는 반복문
		// 단, 5의 배수는 건너뛰고, 증가하는 값이 40이 되었을 때 반복 멈춤
		
		for(int i = 1; i <= 100; i++) {
			
//			if(i % 5 == 0) {
//				continue;
//			}else if(i >= 40) { // 40 == 0 으로 하면, continue 조건에서 넘어가서 이 부분을 만나지 않음
//				break;
//			}
			
			if(i == 40) {
				break;
			}else if(i % 5 == 0) {
				continue;
			}
			
			System.out.println(i);
		}
	}
}

0개의 댓글