제어문

김찬희·2023년 2월 13일
0

KH정보교육원

목록 보기
4/27

Chap01. 조건문

▶ 조건문

프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 조건에 따라 다른 문장이 수행되도록 함
√ 조건문의 종류
if문

if(조건식1) {
	수행될 코드;
} else if(조건식2) {
	수행될 코드;
} else if(조건식3) {
	수행될 코드;
} else {
	수행될 코드;
}

switch문

switch(조건식) {
case 조건식 결과1 :
	수행될 코드;
    break;
case 조건식 결과2 :
	수행될 코드;
    break;
default :
	수행될 코드;
}

▶ if문

√ if

if(조건식) {
	수행될 코드
}

조건식의 결과 값이 true면 if문 내부 코드가 수행됨
false면 실행하지 않음
√ if문 예시

if(num > 0) {
	System.out.println("양수입니다.");
}

√ if~else

if(조건식) {
	true일 때 수행되는 코드
} else {
	false일 때 수행되는 코드
}

조건식의 결과 값이 true이면 if 내의 코드가, false이면 else 내의 코드가 수행됨
√ if~else문 예시

if(num % 2 == 0) {
	System.out.println("짝수");
} else {
	System.out.println("홀수");
}

√ if~else if~else

if(조건식1) {
	조건식1 true일 때 수행
} else if(조건식2) {
	조건식2 true일 때 수행
} else {
	모두 false일 때 수행
}

조건식1의 결과 값이 true면 if문 내 코드 수행
조건식2의 결과 값이 true면 else if 내 코드 수행
모두 false면 else 내 코드 수행

  • if는 true, false와 상관 없이 조건절 실행,
    if~else if~else는 조건문이 true면 이후 조건은 실행하지 않음
    √ if~else if~else문 예시
if(month == 1 || month == 2 || month ==12) {
	season = "겨울";
} else if(month >= 3 && month <= 5) {
	season = "봄";
} else if(month >= 6 && month <= 8) {
	season = "여름";
} else if(month >= 9 && month <= 11) {
	season = "가을";
} else {
	season = "해당하는 계절이 없스니다.";
}

√ 중첩 if

if(조건식1) {
	if(조건식2) {
    	if(조건식3) {
        	수행될 코드;
        } else if(조건식4) {
        	수행될 코드;
        } else {
        	수행될 코드;
        }
} else if(조건식5) {
	수행될 코드;
} else {
	수행될 코드;
}

√ 중첩 if문 예시

if(month == 1 || month == 2 || month == 12) {
	season = "겨울";
    if(temperature <= -15) {
    	season += " 한파 경보";
    } else if(temperature <= -12) {
    	seoson += " 한파 주의보";
    }
} else if(month >= 3 && month <= 5) {
	season = "봄";
} else if(month >= 6 && month <= 8) {
	season = "여름";
    if(temperature >= 35) {
    	season += " 폭염 경보";
    } else if(temperature >= 33) {
    	seoson += " 폭염 주의보";
    }
} else if(month >= 9 && month <= 11) {
	season = "가을";
} else {
	season = "해당하는 계절이 없습니다.";
}
package edu.kh.control.condition.ex;

import java.util.Scanner;

public class ConditionEx {
	
	public void test1() {
		System.out.println("test1() 수행");
	}
	public void test2() {
		System.out.println("test2() 수행");
	}
	public void test3() {
		System.out.println("test3() 수행");	
	}
	
	// if 예시 1번
	public void ex1() {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수 입력 : ");
		int input = sc.nextInt();
		    /*조건식*/
		if( input > 0 ) {  
			// 조건식이 true인 경우에만 if문 {} 내부 코드가 수행된다!
			System.out.println("양수 입니다.");
			System.out.println("ex1() 종료");
		}

		if ( input < 0 ) {
			System.out.println("음수 입니다.");
			System.out.println("ex1() 끝!");
		}
	}
	// if 예시 2번 (if - else)
	public void ex2() {
		// 조건식이 true이면 if문 수행
		// false이면 else문 수행
		
		Scanner sc = new Scanner(System.in);
		System.out.print("정수를 입력해주세요 : ");
		int input = sc.nextInt();
		
		if( input > 0 ) {
			System.out.println("양수 입니다.");
		} else {
			// System.out.println("음수 입니다.");
			
			// [중첩 if문]
			if( input == 0 ) {
				System.out.println("0 입니다.");
			} else {
				System.out.println("음수 입니다.");
			}
		}
	}
	// if 예시 3번 : if - else if - else
	public void ex3() {
		Scanner sc = new Scanner(System.in);
		System.out.println("[홀짝 판별기]");
		System.out.print("정수 입력 : ");
		int input = sc.nextInt();
		
		// 홀수, 짝수, 0
		if (input==0) {
			System.out.println("0은 홀/짝을 구분할 수 없습니다.");
		} else if(Math.abs(input)%2==1) {  // 홀수
			    // 절대값
			System.out.println("홀수 입니다.");
		} else {
			System.out.println("짝수 입니다.");
		}
	}
	// if 예시 4번
	public void ex4() {
		Scanner sc = new Scanner(System.in);
		System.out.print("계절을 알고싶은 달(월)을 입력해주세요 : ");
		int input = sc.nextInt();
		
		// 조건문 결과를 저장할 문자열 변수 선언
		String result;
		
		if(input>=3 && input<=5) {  // 3, 4, 5
			// (input == 3 || input == 4 || input == 5) 도 가능
			result = "봄";
		} else if(input>=6 && input<=8) {  // 6, 7, 8
			result = "여름";
		}else if(input>=9 && input<=11) {  // 9, 10, 11
			result = "가을";
		}else if(input==12 || input==1 || input==2){  // 12, 1, 2
			result = "겨울";
		}else {
			result = "해당하는 계절이 없습니다.";
		}
		// if - else if - else를 거치게 되면
		// 무조건 result에 값이 하나 저장되어 있다!
		System.out.println(result);
	}
	
	// if 예시 5번
	public void ex5() {
		// 나이를 입력 받아
		// 13세 이하면 "어린이"
		// 13세 초과 19세 이하면 "청소년"
		// 19세 초과 "성인" 출력
		// (0세 이하는 생각하지 않음)
		Scanner sc = new Scanner(System.in);
		System.out.println("나이 입력 : ");
		int input = sc.nextInt();
		String result;
		if(input<=13) {
			result = "어린이";
		} else if(input<=19) {
			result = "청소년";
		} else {
			result = "성인";
		}
		System.out.println(result);
	}
	// if 예시 6번
	public void ex6() {
		// 놀이기구 탑승 제한 검사
		
		// 나이가 12세 이상, 키 140.0cm 이상일 경우에만 "탑승 가능"
		
		// 나이가 12세 미만 : "적정 연령이 아닙니다."
		// 키 140.0cm 미만 : "적정 키가 아닙니다."
		// 나이를 0세 미만 또는 100세 초과 입력 시
		
		// [실행화면]
		// 나이 입력 : 15
		// 키 입력 : 170.5
		// 탑승 가능

		/* 나이 제한 */
		// 나이 입력 : 10
		// 키 입력 : 150.5
		// 적정 연령이 아닙니다.
		
		/* 키 제한 */
		// 나이 입력 : 12
		// 키 입력 : 135.5
		// 적정 키가 아닙니다.
		
		/* 나이 0 미만 또는 100 초과 */
		// 나이 입력 : 120
		// 키 입력 : 183.5
		// 잘못 입력 하셨습니다.
		
		Scanner sc = new Scanner(System.in);
		System.out.print("나이 입력 : ");
		int age = sc.nextInt();
		System.out.print("키 입력 : ");
		double height = sc.nextDouble();
		
		if(age<0||age>100) {
			System.out.println("잘못 입력 하셨습니다.");
		} else if(age<12) {
			System.out.println("적정 연령이 아닙니다.");
		} else if(height<140.0) {
			System.out.println("적정 키가 아닙니다.");
		} else {
			System.out.println("탑승 가능");
		}
	}
	// if 예제 6번 업그레이드
	public void ex7() {
		Scanner sc = new Scanner(System.in);
		System.out.print("나이 입력 : ");
		int age = sc.nextInt();
		
		String result;
		
		if(age<0||age>100) {
			result = "잘못 입력 하셨습니다.";
		} else if(age < 12) {
			result = "적정 연령이 아닙니다.";
		} else {
			// else 내부에서는 age가 정상 입력으로 판단됨
			System.out.print("키 입력 : ");
			double height = sc.nextDouble();
			
			if(height<100||height>220) {
				result = "잘못 입력 하셨습니다.";
			} else if(height<140) {
				result = "적정 키가 아닙니다.";
			} else {
				result = "탑승 가능";
			}
		}
		System.out.println(result);
	}
}

▶ switch문

조건식 하나로 많은 경우의 수 처리할 때 사용하며 이 때 조건식의 결과는 정수 또는 문자, 문자열 조건식의 결과 값과 일치하는 case문으로 이동
default문은 일치하는 case문이 없을 때 수행(=else)
√ switch문 예시

switch(num % 5) {
case 1:
	team = "1조"; break;
case 2:
	team = "2조"; break;
case 3:
	team = "3조"; break;
case 4:
	team = "4조"; break;
default:
	team = "다시"; 
}
package edu.kh.control.condition.ex;

import java.util.Scanner;

public class SwitchEx {

	/* Switch문 (switch-case문)
	 * - 식 하나의 결과로 많은 경우의 수를 처리할 때 사용하는 조건문
	 *  -> 식의 결과에 맞는 case문이 수행됨
	 * 
	 * [작성법]
	 * switch(식){  // 식 수행 결과는 true/false가 아닌 값(정수, 문자열 많이 씀)
	 * case 결과값1: 수행코드1; break;
	 * case 결과값2: 수행코드2; break;
	 * case 결과값3: 수행코드3; break;
	 * default: 모든 case가 만족하지 않을 경우 수행하는 코드;
	 * } 
	 * */
	
	public void ex1() {
		// 키보드로 정수를 입력 받아서
		// 1이면 "RED"
		// 2이면 "ORANGE"
		// 3이면 "YELLOW"
		// 4이면 "GREEN"
		// 1~4가 아니면 "BLUE" 를 출력
		
		// sc -> ctrl + spacebar -> Scanner 선택
		// => 자동완성(문구 완성, import 추가)
		Scanner sc = new Scanner(System.in);
		System.out.print("정수 입력: ");
		int input = sc.nextInt();
		String result;  // 결과를 저장할 변수
		
		// 1) if-else if-else 버전
//		if(input==1) {
//			result = "RED";
//		}else if(input==2) {
//			result = "ORANGE";
//		}else if(input==3) {
//			result = "YELLOW";
//		}else if(input==4) {
//			result = "GREEN";
//		}else {
//			result = "BLUE";
//		}
//		System.out.println(result);
		// 2) switch 버전
		
		// switch 예시 1
		switch(input){
		case 1: 
			result = "RED"; 
			break;
		case 2: 
			result = "ORANGE"; 
			break;
		case 3: 
			result = "YELLOW"; 
			break;
		case 4: 
			result = "GREEN"; 
			break;
		default: 
			result = "BLUE";
		}
		System.out.println(result);
	}
	// switch 예시 2
	public void ex2() {
	
		// 랜덤 팀 배정 프로그램
		// (백팀 0 , 청팀 1 , 홍팀 2)
		
		// * Java에서 랜덤한 수(난수) 발생시크는 방법 *
		// Math.random() : 난수 발생
		// 1) 난수 발생 범위 : 0.0 <= random < 1.0
		// 2) 발생한 난수의 자료형 : double
		// + 실수 -> 정수 강제형변환 : 소수점 버림
		
		// Math.random(); 				// 0.0 <= random < 1.0
		// Math.random() * 3;			// 0.0 <= random * 3 < 3.0
		int random = (int)(Math.random() * 3);	// 0 <= (int)(random * 3) < 3
		String result;
		switch(random) {
		case 0: result = "백팀"; break;
		case 1: result = "청팀"; break;
		default: result = "홍팀";
		}
		System.out.println(result);
		
	}
	
	// switch 예시 3 : 식의 결과가 "문자열" (String)
	public void ex3() {
		// scan -> ctrl + spacebar -> enter
		// ${:import(java.util.Scanner)}Scanner sc = new Scanner(System.in);${cursor}
		Scanner sc = new Scanner(System.in);
		
		// 메뉴를 입력 받아서 가격이 얼마인지 출력하기
		
		System.out.print("메뉴를 입력하세요(김밥/라면/샌드위치/떡볶이) : ");
		String input = sc.next();
		
		int price;  // 가격 저장할 변수 선언
		
		switch(input) {
		case "김밥": price = 4500; break;
		case "라면": price = 3500; break;
		case "샌드위치": price = 5800; break;
		case "떡볶이": price = 4000; break;
		default: price = -1;  
		// 잘못 입력한 경우에 사용하지 않는 숫자(-1)를 이용해서 표현
		}
		if(price != -1) {
			System.out.printf("%s은(는) %d 입니다.", input, price);
		} else { // price가 -1인 경우
			System.out.println("존재하지 않는 메뉴입니다.");
		}
	}
	
	// switch 예시 4
	public void ex4() {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수1 입력 : ");
		int a = sc.nextInt();
		System.out.print("연산자 입력 : ");
		String op = sc.next();
		System.out.print("정수2 입력 : ");
		int b = sc.nextInt();
		String st = "%d %s %d = %d";  // printf 출력 구문
		switch(op) {
		case "+": System.out.printf(st, a, op, b, a+b); break;
		case "-": System.out.printf(st, a, op, b, a-b); break;
		case "*": System.out.printf(st, a, op, b, a*b); break;
		case "/":
			if(b==0) {
				System.out.println("0으로는 나눌 수 없습니다.");
			} else {
				System.out.printf("%d %s %d = %.2f", a, op, b, (double)a/b);
			} break;
		case "%": 
			if(b==0) {
			System.out.println("0으로는 나눌 수 없습니다.");
			} else {
			System.out.printf(st, a, op, b, a%b);
			} break;
		default: System.out.println("존재하지 않는 연산자 입니다.");
		}
	}
	
	// switch 예시 5 : break의 역할
	
	// 계절 판별(switch version)
	public void ex5() {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("달(월) 입력 : ");
		int month = sc.nextInt();
		
		String result;
		
		// break : 멈추다
		// -> 해당 case를 수행한 후 멈춰라!
		// -> break 미작성 시 다음 case가 연달아 수행된다!
		
		// * case 마다 꼭 코드가 작성될 필요는 없다!
		switch(month) {
		case 12: case 1: case 2: result = "겨울"; break;
		case 3: case 4: case 5: result = "봄"; break;
		case 6: case 7: case 8: result = "여름"; break;
		case 9: case 10: case 11: result = "가을"; break;
		default: result = "잘못 입력 하셨습니다.";
		}
		System.out.println("계절 : " + result);
	}
}

Chap02. 반복문

▶ 반복문

프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 특정 문장들을 반복해서 수행하도록 함
제어문 중 하나로 특정 문장들을 반복해서 수행함
조건문 베이스 (true / false)
전에 무슨 상황이 있었고 앞으로 어떤 상황이 있을지 기억해야 함!
√ 반복문의 종류
for문

for(초기식; 조건식; 증감식) {
	수행될 코드;
}

while문

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

▶ for문

√ for문(반복횟수가 정해져 있을 경우)

for(초기식; 조건식; 증감식) {
	수행될 코드;
}
  1. 1회전 : 초기식 확인 후 조건식 확인
    조건식이 true면 문장 수행 후 증감식 연산
    조건식이 false면 수행하지 않음
  2. 2회전 : 조건식 확인
    조건식이 true면 문장 수행 후 증감식 확인
    조건식이 false면 수행하지 않음
    ※ 2회전 이상부터는 모두 2회전과 동일하고 조건식이 false가 나올 때까지 문장 수행
    √ for문 예시
for(int i = 1; i <= 10; i++) {
	System.out.println(i + " 출력");
}

int sum = 0;
for(int i=1; i<=100; i++) {
//     1부터  100까지        더하겠다.
	sum += i;       누적해서
}

√ 실행 결과
1 출력
2 출력
...
9 출력
10 출력

▶ 중첩 반복문

00:00:00 시를 보고 분을 보고 초를 본다.
√ 표현식

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

for문에 진입하면 수행될 코드1을 먼저 수행하고 두 번째 for문에 진입하면 조건식2가 false가 될 때까지 수행될 코드2를 수행 후 나오면 수행될 코드3을 수행하고 조건식1로 돌아와 true면 다시 반복

package edu.kh.control.loop.ex;

import java.util.Scanner;

public class ForEx {
	/* for문
	 * - 끝이 정해져 있는 경우에 사용하는 반복문
	 *   (== 반복 횟수가 지정되어 있는 경우 사용)
	 *   
	 * - 작성법
	 *     int a = 1  ;   a < 3   ;    a++
	 * for( [1]초기식 ; [2][5][8]조건식 ; [4][7]증감식 ){
	 * 
	 * 		[3][6]조건식이 true일 때 반복 수행할 코드
	 * 
	 * }
	 * 
	 *	// 1~4번 수행 후 조건식이 false가 나올 때 까지  5~7을 반복 
	 * 
	 * - 초기식 : for문을 제어하는 용도의 변수를 선언 및 초기화
	 * 
	 * - 조건식 : for문의 반복 여부를 지정하는 식
	 * 			  조건식이 true인 경우에만 반복 수행을 함.
	 * 			  보통 초기식에 사용된 변수를 이용해서
	 *  		  조건식을 작성함.
	 *  
	 * - 증감식 : for문이 한 번 반복을 수행할 때 마다
	 *  		  마지막에 특정 값을 증가 또는 감소 시키는 식
	 *  		  보통 초기식에 사용된 변수를 증가/감소 시켜
	 *  		  조건식의 결과를 변화하게 만드는 용도
	 * 
	 * 
	 * */
	
	// for문 기초 사용법 1
	public void ex1() {
		// 1~10까지 반복 출력
		// 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13.....
		for( int num=1 ; num<=10 ; num++ ) {
			// num은 1~10까지 1씩 증가하는 변수
			System.out.println(num);
		}
	}
	// for문 기초 사용법 2
	public void ex2() {
		// 5부터 12까지 1씩 증가하며 출력
		for( int num=5 ; num<=12 ; num++) {
			System.out.print(num + " ");
		}
	}
	// for문 기초 사용법 3
	public void ex3() {
		// 3부터 20까지 2씩 증가하며 출력
		for(int i=3; i<=20 ; i+=2) {
			System.out.print(i + " ");
		}
	}
	// for문 기초 사용법 4 
	public void ex4() {
		// 1부터 100까지의 모든 정수의 합
		int sum = 0;  // i가 증가 하면서 변한 값들을 누적할 변수 선언
		              // 0으로 초기화 하는 이유 : 어떤 값을 더하든 영향이 없어서
		for(int i=0; i<=100; i++) {
			sum += i;
		}
		System.out.println("합계 : " + sum);
	}
	// for문 기초 사용법 5
	public void ex5() {
		// 두 정수를 입력 받아 
		// 두 정수 사이의 모든 정수의 합 출력하기
		// (단, 첫 번째 입력 받는 정수가 무조건 작다고 가정)
		Scanner sc = new Scanner(System.in);
		System.out.print("정수 1 입력 : ");
		int a = sc.nextInt();
		System.out.print("정수 2 입력 : ");
		int b = sc.nextInt();
		
		int sum = 0;
		for(int i=a;i<=b;i++) {
			sum +=i;
		}
		System.out.printf("%d부터 %d까지 모든 정수의 합 : %d", a, b, sum);
	}
	// for문 기초 사용법 6
	public void ex6() {
		// 다른 자료형으로 for문 사용하기
		// 10부터 20까지 0.5씩 증가하며 출력
		for(double i = 10.5; i <= 20; i+=0.5) {
			// 초기식을 int형을 지정하게 되는 경우 무한루프에 
			// 왜? i += 0.5 수행 시 10.5가 아닌
			// 10으로(int형으로) 형변환되어 i에 대입되기 때문에
			// i가 계속 10을 유지한다
			
			// 해결 방법 : 초기식을 double 자료형으로 변경
			System.out.println(i);
		}
		System.out.println("-----------------------");
		// A-Z까지 모든 알파벳 출력하기
		// 1) A(65), Z(90)의 유니코드 번호를 이용하기
		for(int i = 65;i<=90;i++) {
			System.out.print((char)i);
		}
		// 2) 유니코드 번호를 모를 때
		System.out.println();
		for(int i = 'A'; i<='Z';i++) {
			System.out.print((char)i);
		}
		// 3) char 자료형은 문자형이지만 실제로는 정수를 저장한다!
		System.out.println();
		for(char i = 'A'; i<='Z';i++){
			System.out.print(i);
		}
	}

	// for문 응용 사용법 1
	public void ex7() {
		// 감소하기
		// 10부터 1까지 1씩 감소하며 출력
		for(int i = 10; i>=1; i--) {
			System.out.println(i);
		}
	}
	// for문 응용 사용법 2
	public void ex8() {
		// 입력, 합계(sum), for
		// 정수 5개 입력 받아 합계 출력하기
		Scanner sc = new Scanner(System.in);
		int sum = 0;
		for(int i=1;i<=5;i++) {  // 1부터 5까지 1씩 증가 (5회 반복)
			System.out.printf("정수 입력 %d : ", i);
			sum += sc.nextInt();
		}	
		System.out.println(sum);
	}
	// for문 응용 사용법 3
	public void ex9() {
		// ex8번 응용
		// 정수를 몇 번 입력 받을지 먼저 입력하고
		// 입력된 정수의 합계를 출력
		// 입력 받을 정수의 개수 : 2
		// 입력 1 : 3
		// 입력 2 : 5
		// 합계 : 8
		Scanner sc = new Scanner(System.in);
		System.out.print("입력 받을 정수의 개수 : ");
		int count = sc.nextInt();
		int sum = 0;
		for(int i=1;i<=count;i++) {
			System.out.printf("입력 %d : ", i);
			sum += sc.nextInt();
		}
		System.out.println("합계 : " + sum);
	}
	// for문 응용 사용법 4
	public void ex10() {
		// for + if 동시 사용
		// 1부터 10까지 반복하며 출력
		// 단, 짝수일 경우 ()로 숫자를 감싸서 출력
		
		// 1 (2) 3 (4) 5 (6) 7 (8) 9 (10)
		for(int i=1;i<=10;i++) {
			if(i%2==0) {
				System.out.printf("(%d) ", i);
			} else {
				System.out.printf("%d ", i);
			}
		}
	}
	// for문 응용 사용법 5
	public void ex11() {
		// 1부터 10까지 1씩 증가하며 출력
		// 단, 3의 배수의 경우 숫자를 [] 감싸서 출력
		// 단, 5의 배수인 경우 숫자 대신 @ 출력
		
		// 1 2 [3] 4 @ [6] 7 8 [9] @
		for(int i=1;i<=10;i++) {
			if(i%3==0) {
				System.out.printf("[%d] ", i);
			} else if(i%5==0) {
				System.out.print("@ ");
			} else {
				System.out.printf("%d ", i);
			}
		}
	}
	// for문 응용 사용법 6
	public void ex12() {
		// for, if, printf
		// 구구단 2단 출력하기
		// 2 x 1 = 2
		// 2 x 2 = 4
		// 2 x 3 = 6
		// 2 x 4 = 8
		// 2 x 5 = 10
		// 2 x 6 = 12
		// 2 x 7 = 14
		// 2 x 8 = 16
		// 2 x 9 = 18
		for(int i=1;i<10;i++) {
			System.out.printf("2 x %d = %2d\n", i, 2*i);
		}
	}
	// for문 응용 사용법 7
	public void ex13() {
		// 원하는 단을 입력 받아서 역순으로 출력
		// 단 입력 : 3
		// 3 x 9 = 27 
		// 3 x 8 = 24
		// 3 x 7 = 21
		// 3 x 6 = 18
		// 3 x 5 = 15
		// 3 x 4 = 12
		// 3 x 3 =  9
		// 3 x 2 =  6
		// 3 x 1 =  3
		Scanner sc = new Scanner(System.in);
		System.out.print("단 입력 : ");
		int num = sc.nextInt();
		for(int i=9;i>=1;i--) {
			System.out.printf("%d x %d = %2d\n", num, i, num*i);
		}
	}
	// for문 응용 사용법 8
	public void ex14() {
		// 입력 받은 단의 구구단 출력하기
		// 단, 입력 받은 단이 2~9사이가 아니라면
		// "잘못 입력 하셨습니다." 출력
		Scanner sc = new Scanner(System.in);
		System.out.print("단 입력 : ");
		int input = sc.nextInt();
		if(input<2 || input>9) {
			System.out.println("잘못 입력 하셨습니다.");
		} else {
			for(int i=1;i<=9;i++) {
				System.out.printf("%d x %d = %2d\n", input, i, input*i);
			}
		}
	}
	// 중첩 반복문 기본 사용법 1
 	public void ex15() {
 		//12345
 		//12345
 		//12345
 		//12345
 		// 1), 2), 3) 코드를 위해 생각한 순서
 		for(int j=1;j<=4;j++) {  // 3) 4회 반복
	 		for(int i=1;i<=5;i++) {  // 1) 12345
	 			System.out.print(i);
	 		}
	 		System.out.println();  // 2) 줄바꿈(개행)
 		}
 	}
	// 중첩 반복문 기본 사용법 2
 	public void ex16() {
 		// 1   2   3   4   5
 		// 2   4   6   8  10
 		// 3   6   9  12  15
 		// 4   8  12  16  20
 		// 5  10  15  20  25
 		for(int x=1;x<=5;x++) {
 			for(int i=1;i<=5;i++) {
	 			System.out.printf("%3d", i*x);
	 		}
	 		System.out.println();
 		}
 	}
	// 중첩 반복문 응용 사용법1
 	public void ex17() {
 		// 구구단을 2단 부터 9단가지 모두 출력하기
 		// 2x1=2 2x2=4 2x3=6
 		// 3x1=3 3x2=6 3x3=9
 		// 4x1=4 4x2=8 4x3=12
 		for(int dan=2;dan<=9;dan++) {
 			for(int num=1;num<=9;num++) {
 				System.out.printf("%dx%d=%2d ",dan,num,dan*num);
 			}
 			System.out.println();
 		}
 	}
	// 중첩 반복문 응용 사용법2
 	public void ex18() {
 		//2중 for문을 이용하여 다음 모양을 출력하세요.
 		// 1
 		// 12
 		// 123
 		// 1234
 		for(int x=1;x<=4;x++) {  // 4번 반복 (x=1,2,3,4)
 			for(int i=1;i<=x;i++) {  // 한 줄 출력
 				System.out.print(i);
 			}
 			System.out.println();  // 개행
 		}
 	}
 	//중첩 반복문 응용 사용법3
 	public void ex19() {
 		//2중 for문을 이용하여 다음 모양을 출력하세요.
 		// 4
 		// 43
 		// 432
 		// 4321
 		for(int x=4;x>=1;x--) {  // x=4, 3, 2, 1
 			for(int i=4;i>=x;i--) {
 				System.out.print(i);
 			}
 			System.out.println();
 		}
 	}
 	// 중첩 반복문 응용 사용법4
 	public void ex20() {
 		// 입력된 정수 : 3
 		// 321
 		// 21
 		// 1
 		
 		// 입력된 정수 : 4
 		//  4321
 		//  321
 		//  21
 		//  1
 		Scanner sc = new Scanner(System.in);
 		System.out.print("입력된 정수 : ");
 		int input = sc.nextInt();
 		
 		for(int x=input;x>=1;x--) {
 			for(int i=x;i>=1;i--) {
 				System.out.print(i);
 			}
 			System.out.println();
 		}
 	}
	// 카운트(개수 세기)
 	public void ex21() {
 		// 1부터 20사이의 3의 배수의 합과 개수를 출력
 		// 3 6 9 12
 		// sum : 63
 		// count : 6
 		int sum = 0;  // 합계 저장용 변수
 		int count = 0;  // 카운트용 변수
 		for(int i=1;i<=20;i++) {
 			if(i%3==0) {  // 3의 배수인 경우
 				sum += i;  // 누적
 				count++;  // 개수 증가(1)
 			}
 		}
 		System.out.println("sum : " + sum);
 		System.out.println("count : " + count);
 	}
	// count를 이용한 2중 for문
 	public void ex22() {
 		// 1  2  3  4
 		// 5  6  7  8
 		// 9 10 11 12
 		int count = 1;  // 숫자를 세기위한 변수 선언
 		for(int i = 1;i<=3;i++) {  // 3행
 			for(int j=1;j<=4;j++) {  // 4열
 				System.out.printf("%3d",count++);
 				// 출력 후 1 증가(후위 연산)
 			}
 			System.out.println();  // 개행
 		}
 	}
	
}

▶ while문

√ while

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

조건식이 true일 때 문장 수행
문장 수행이 끝나면 조건식 다시 확인 후
true면 수행, 조건식이 false가 될 때까지 수행
조건식이 false가 되면 반복문 종료
※ {} 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요
√ while문 예시

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

√ 실행 결과
1 출력
2 출력
...
9 출력
10 출력
√ do ~ while

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

do 안의 내용 먼저 실행
조건식 확인 후 true면 문장 수행, false면 종료
while 뒤에 ; 꼭 필요
※ {} 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요
※ while과 do~while의 차이점
do~while은 조건문이 true가 아니더라도 무조건 한 번 이상 수행
√ while문 예시

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

√ 실행 결과
1 출력
2 출력
...
9 출력
10 출력

package edu.kh.control.loop.ex;

import java.util.Scanner;

public class WhileEx {
	/* while문
	 * 
	 * - 별도의 초기식, 증감식이 존재하지 않고
	 *   반복 조건만을 설정하는 반복문
	 *   
	 * - 반복 횟수가 지정 되어있지 않은 반복에 사용 
	 * 
	 * [작성법]
	 * while(조건식){
	 * 	   조건식이 true인 경우 반복 수행할 구문
	 * }
	 * */
	
	// while 기초 사용법 1
	public void ex1() {
		// 0이 입력 될 때 까지의
		// 입력된 모든 정수의 합 출력하기
		Scanner sc = new Scanner(System.in);
		int input = -1;  // 입력 받은 값을 저장할 변수
		int sum = 0;  // 합계 저장용 변수
		while(input!=0) {  // input이 0이면 종료
			System.out.print("정수 입력 : ");
			input = sc.nextInt();
			sum += input;  // 누적
			System.out.println("현재 합계 : " +sum);
		}
		System.out.println("최종 결과 : " +sum);
	}
	// while 기초 사용법 2
	public void ex2() {
		
		// 분식집 주문 프로그램
		
		// --- 메뉴 ---
		// 1. 떡볶이(5000원)
		// 2. 김밥(3000원)
		// 3. 라면(4000원)
		// 9. 주문 완료
		// 메뉴 선택 >> 1
		//
		// --- 메뉴 ---
		// 1. 떡볶이(5000원)
		// 2. 김밥(3000원)
		// 3. 라면(4000원)
		// 메뉴 선택 >> 2
		//
		// --- 메뉴 ---
		// 1. 떡볶이(5000원)
		// 2. 김밥(3000원)
		// 3. 라면(4000원)
		// 메뉴 선택 >> 9
		
		// 떡볶이 김밥을 주문하셨습니다.
		// 총 가격은 8000원 입니다.
		
		Scanner sc = new Scanner(System.in);
		int input = 0;  // 메뉴 번호를 입력 받을 변수
		// input의 값은 while 조건이 false가 되지 않는 값을 작성하면 된다!
		// -> 보통 자료형 범위의 중간값인 0을 사용하고 이를 기본값이라 한다!
		int sum = 0;  // 가격 합계 저장용 변수
		String menu = "";  // 빈문자열
		// 내용이 없는 String
		while(input!=9) {
			System.out.println("--- 메뉴 ---");
			System.out.println("1. 떡볶이(5000원)");
			System.out.println("2. 김밥(3000원)");
			System.out.println("3. 라면(4000원)");
			System.out.println("9. 주문 완료");
			System.out.print("메뉴 선택 >> ");
			input = sc.nextInt();  // 메뉴 번호 입력 받기
			System.out.println();  // 개행
			switch(input){
				case 1:
					sum += 5000;
					menu += "떡볶이 ";
					break;
				case 2:
					sum += 3000;
					menu += "김밥 ";
					break;
				case 3:
					sum += 4000;
					menu += "라면 ";
					break;
				case 9:
					break;
				default: System.out.println("잘못 입력 하셨습니다.");
			} // switch 끝
		} // while 끝
		System.out.printf("%s을/를 주문하셨습니다.\n", menu);
		System.out.printf("총 가격은 %d입니다.\n", sum);
	}
	
	// do ~ while문 기초 사용법
	public void ex3() {
		
		// do ~ while문
		// - 최초 1회를 무조건 수행하는 반복문
		//   (최소 1회 이상 반복을 보장하는 반복문)
		Scanner sc = new Scanner(System.in);
		int sum = 0;
		int input = 0;
		do{  // 일단 1회 실행
			System.out.print("정수 입력 : ");
			input = sc.nextInt();
			sum += input;
			System.out.println("현재 합계 : " + sum);
		}while(input != 0);  // 0 입력 시 종료
		System.out.println("최종 결과 : " + sum);
	}
	
	// while문을 for문처럼 사용하기
	public void ex4() {

		// 1부터 10까지 반복해서 출력
		// for문
		for(int i = 1;i<=10;i++) {
			System.out.print(i+" ");
		}
		System.out.println("\n====================");
		
		// while문
		int i = 1;
		while(i<=10) {
			System.out.print(i+" ");
			i++;
		}
	}
	
}

Chap03. 분기문

▶ 분기문

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

for(int i = 1;; i++) {
	System.out.println(i + " 출력");
    if(i >= 10) {
    	break;
    }
}

√ 중첩 반복문에서의 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 + "출력");
}
package edu.kh.control.branch.ex;

import java.util.Scanner;

public class BranchEx {
	
	// 분기문 
	// break	: 가장 가까운 반복문을 멈춤(빠져나감)
	// continue	: 가장 가까운 반복문 시작 부분으로 이동(다음 반복으로 이동)
	
	// break 예시 1
	public void ex1() {
		for(int i=1;i<=10000;i++) {
			System.out.println(i);
			if(i==20) {  // i가 20인 경우
				break;  // 반복문 멈춤
			}
		}
	}
	// break 예시 2
	public void ex2() {
		// 0 입력 시 까지 입력된 정수 합 구하기
		Scanner sc = new Scanner(System.in);
		
		int sum = 0;  // 합계 저장용 변수
		int input = 0;  // 입력 값 저장용 변수
		
		while(true) {  // 무조건 조건식 true == 무한 루프
			System.out.print("정수 입력 : ");
			input = sc.nextInt();
			sum += input;
			if(input==0) {  // 입력 받은 값이 0인 경우
				break; // while문 종료
			}
		}
		System.out.println("합계 : "+sum);
		// Unreachable code : 도달할 수 없는 코드
	}
	
	// break 예시 3
	public void ex3() {
		for(int row=1;row<=5;row++) {
			for(int col=1;col<=5;col++) {
				if(col==3) {
					break;  // 안쪽 for문 멈춤
					// -> 2열 까지만 출력
				}
				System.out.printf("(%d, %d) ",row,col);
			}
			System.out.println();
			if(row==4) {
				break;  // 바깥쪽 for문 멈춤
				// -> 4행 까지만 출력
			}
		}
	}
	
	// continue 예시 1
	public void ex4() {
		// 1 2 3 4 5 6 7 8 9 10
		for(int i=1;i<=10;i++) {
			if(i%2==0) {  // 짝수 일 경우
				continue;
			}
			
			System.out.print(i + " ");
		}
	}
	
	public void ex5() {
		// 1~ 100까지 1씩 증가하며 출력하는 반복문
		// 단, 5의 배수는 출력을 건너뛰고
		// 증가하는 값이 40이 되었을 때 반복을 멈춰라
		for(int i=1;i<=100;i++) {
//			if(i==40){
//				break;
//			}
			if(i%5==0) { // 5의 배수
				if(i==40) {
					break;
				}else {
					continue;
				}
			}
			System.out.print(i+" ");
		}
	}
	
	// 분기문 응용 1
	public void upDownGame() {
		
		// 1~50 사이의 난수를 하나 지정하여
		// 사용자가 몇 회 만에 맞추는지 카운트하는 게임
		// 난수 : Math.random
		// count, while, break
		
		// ex) 난수가 30인 경우
		
		// 1번 입력 : 10
		// UP
		
		// 2번 입력 : 40 
		// DOWN
		
		// 3번 입력 : 30
		// 정답 입니다!(총 입력 횟수 : 3회)
		Scanner sc = new Scanner(System.in);
		
		int x = (int)(Math.random()*50+1);
		int count = 1;  // 반복 횟수 저장용 변수
		while(true) {  // 무한 반복
			System.out.printf("%d번 입력 : ", count);
			int input = sc.nextInt(); 
			if(x>input) {  // 입력값이 작은 경우
				System.out.println("UP");
			}else if(x<input) {  // 입력값이 큰 경우
				System.out.println("DOWN");
			}else {  // 입력 값 == 난수 (정답)
				System.out.printf("정답 입니다!(총 입력 횟수 : %d회)", count);
				break;
			}
			count++;  // 카운트 증가
		}
	}
	
	// 분기문 응용 2
	public void ex6() {
		// 시작 번호 부터 끝 번호까지 1씩 증가하며 출력하는 반복문
		// 특정 수의 배수를 입력 받아 출력모양 변경 
		
		// 시작 : 5
		// 종료 : 13
		// 제외할 배수 : 6
		
		// 5 [6] 7 8 9 10 11 [12] 13 14
		
		Scanner sc = new Scanner(System.in);
		System.out.print("시작 : ");
		int st = sc.nextInt();
		System.out.print("종료 : ");
		int ed = sc.nextInt();
		System.out.print("변경할 배수 : ");
		int input = sc.nextInt();
//		while(true) {
//			if(st==ed) {
//				System.out.print(st + " ");
//				break;
//			} else if(st%input==0) {
//				System.out.printf("[%d] ", st);
//			} else {
//				System.out.print(st + " ");
//			}
//			st++;
//		}
		for(int i=st;i<=ed;i++) {
			if(i%input==0) {
				System.out.printf("[%d] ", i);
			} else {
				System.out.print(i + " ");
			}
		}
	}
}
profile
김찬희입니다.

0개의 댓글