if문은 조건이 많아질수록 else-if문을 계속 추가해야 하므로 조건식이 많아져서 복잡해지고, 여러 개의 조건식을 계산해야 하므로 처리시간도 많이 걸린다.

switch문은 단 하나의 조건으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하므로 알아보기 쉽다.

 

switch문의 연산방식

1. 조건식을 계산한다.
2. 조건식의 결과와 일치하는 case문으로 이동한다.
3. 이후의 문장들을 수행한다.
4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.
switch문의 제약조건

1. switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
2. case문의 값은 정수 상수만 가능하며, 중복되지 않아야 한다.

 

 

 

 

public class FlowEx07 {
	public static void main(String[] args) {
		System.out.print("가위(1),바위(2),보(3) 중 하나를 입력하세요.>");
		
		Scanner scanner = new Scanner(System.in);
		int user = scanner.nextInt();
		int com = (int)(Math.random() * 3) +1;
		
		System.out.println("당신은 "+ user +"입니다.");
		System.out.println("컴은 "+ com +"입니다.");
		
		switch(user-com) {
		case 2: case -1:
			System.out.println("당신이 졌습니다.");
			break;
		case 1: case -2:
			System.out.println("당신이 이겼습니다.");
			break;
		case 0:
			System.out.println("비겼습니다.");
			break;
		}
		scanner.close();
	}//main의 끝
}
실행결과1

가위(1),바위(2),보(3) 중 하나를 입력하세요.>1
당신은 1입니다.
컴은 1입니다.
비겼습니다.
실행결과2

가위(1),바위(2),보(3) 중 하나를 입력하세요.>2
당신은 2입니다.
컴은 1입니다.
당신이 이겼습니다.

만약 if문으로 하면 중첩if문 3개를 사용했어야 했겠지만, switch조건문을 사용하면 switch한개로 처리가 된다.

 

 

switch문의 중첩

if문처럼 switch문도 중첩이 가능하다.

public class FlowEx11 {
	public static void main(String[] args) {
		System.out.print("당신의 주민번호를 입력하세요. (011231-1111222)>");
		
		Scanner scanner = new Scanner(System.in);
		String regNo = scanner.nextLine();
		char gender = regNo.charAt(7);
		
		switch(gender) {
		case '1': case '3':
			switch(gender) {
			case '1':
				System.out.println("당신은 2000년 이전에 출생한 남자입니다.");
				break;
			case '3':
				System.out.println("당신은 2000년 이후에 출생한 남자입니다.");
			}
			break;
		case '2': case '4':
			switch(gender) {
			case '2':
				System.out.println("당신은 2000년 이전에출생한 여자입니다.");
				break;
			case '4':
				System.out.println("당신은 2000년 이후에 출생한 여자입니다.");
				break;
			}
			break;
			default:
				System.out.println("유효하지 않은 주민등록번호입니다.");

		}
		scanner.close();
	}//main의 끝
}

방법은 if문이랑 큰 차이가 없다.

만약 이걸 if문으로 적으려고 했으면 보기도 힘들어질 것이다.

'JAVA 04강 조건문과 반복문 > 조건문 if, switch' 카테고리의 다른 글

if, if else조건문  (0) 2021.07.14

조건문은 조건식과 문장을 포함하는 블록{}으로 구성되어 있으며,

조건식의 연산 결과에 따라 실행할 문장이 달라져서 프로그램의 실행 흐름을 변경할 수 있다.

주로 if문이 많이 사용된다.

처리할 경우의 수가 많을 때는 if문보다 switch문이 효율적이다.

 

if문

if문의 조건식이 참(true)이면 괄호{} 안의 문장들을 수행한다.

if (조건식) {
	//조건식이 참(true)일 때 수행될 문장들을 적는다.
}

 

if문에 사용되는 조건식은 일반적으로 비교연산자와 논리 연산자로 구성된다. 

비교 연산자와 논리 연산자는 값이 boolean 타입으로 나온다.

 

if문에 들어가는 조건식

	public static void main(String[] args) {
		int x = 0;
		System.out.printf("x=%d 일 때, 참인 것은%n", x);

		if (x == 0)
			System.out.println("x==0");
		if (x != 0)
			System.out.println("x!=0"); // f
		if (!(x == 0))
			System.out.println("!(x==0)"); // f
		if (!(x != 0))
			System.out.println("!(x!=0)");
            }
     }
x=0 일 때, 참인 것은
x==0
!(x!=0)

if (x != 0)이 조건으로 들어간 식과 if (!(x == 0))이 조건으로 들어간 식은 실행이 안 되는 것을 확인할 수 있다.

 

블록{ }

{ }를 이용해서 여러 가지 문장을 하나의 단위로 묶을 수 있으며, if의 조건문이 참일 때 같이 실행이 된다.

if(score > 60) 
블럭의 시작{
	System.out.printlm("합격입니다.");
	System.out.printlm("축하드립니다.");
	} if문 블럭의 끝
합격입니다.
축하드립니다.

만약 블럭{ }이 없었다면 합격입니다. 만 if문에 의해 출력이 되고 축하드립니다는 블록을 벗어날 것이다.

블록이 없다면 score의 점수가 60이 안됬을 때 그냥 축하드립니다만 출력이 된다.

합격점수가 안됐는데 축하한다니 인성에 의문을 가지게 되는 코드가 되는 것이다.

 

if-else문

if-else문은 if문에 else가 추가된 것이다.

if (조건식) {
	조건식이 참(true)일 때 수행될 문장들을 적는다.
    } else {
    조건식이 거짓(false)일 때 수행될 문장들을 적는다.
    }

if-else는 if문을 두 개 써야 하는 것보다 조금 더 쉽게 접근할 수 있게 한다.

익숙해지면 if문을 두 개 쓰는 것보다 if else문이 더 보기 편해진다.

 

if-else if문

if-else문은 두 가지 경우 중 하나가 수행되는 구조인데, 처리해야 할 경우의 수가 셋 이상인 경우에는 if를 더 붙여서 쓰면 된다.

if (조건식1) {
	//조건식1의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식2) {
	//조건식2의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식3) {
	//조건식3의 연산결과가 참일 때 수행될 문장들을 적는다.
} else {
	//어느 조건도 만족하지 않을 때 수행될 문장들을 적는다.
}

 

결과가 참인 조건식을 만날 때까지 코드를 실행한다.

참인 조건식을 만나면 해당 블록{}을 수행한다.

if-else if문 전체를 빠져나온다.

 

public class FlowEx04 {
	public static void main(String[] args) {
		int score = 0;
		char grade = ' ';

		System.out.print("점수를 입력하세요.>");
		Scanner scanner = new Scanner(System.in);
		score = scanner.nextInt();

		if (score >= 90) {
			grade = 'A';
		} else if (score >= 80) {
			grade = 'B';
		} else if (score >= 70) {
			grade = 'C';
		} else {
			grade = 'D';
		}


		System.out.println("당신의 학점은 "+ grade +"입니다.");
		scanner.close();
	}
}
점수를 입력하세요.>90
당신의 학점은 A입니다.

중첩 if문

if문의 블럭 내에 또 다른 if문을 포함시키는 것이 가능한데 이것을 중첩 if문이라고 부르며 중첩의 횟수에는 거의 제한이 없다.

 

public class FlowEx05 {
	public static void main(String[] args) {
		int score = 0;
		char grade = ' ', opt = '0';

		System.out.print("점수를 입력해주세요.>");

		Scanner scanner = new Scanner(System.in);
		score = scanner.nextInt();

		System.out.printf("당신의 점수는 %d입니다.%n", score);

		if (score >= 90) {
			grade = 'A';
			if (score >= 98) {
				opt = '+';
			} else if (score < 94) {
				opt = '-';
			}
		} else if (score >= 80) {
			grade = 'B';
			if (score >= 88) {
				opt = '-';
			}
		} else {
			grade = 'C';
		}
		System.out.printf("당신의 학점은 %c%c입니다.%n", grade, opt);
		scanner.close();
	}
}
점수를 입력해주세요.>88
당신의 점수는 88입니다.
당신의 학점은 B-입니다.

위의 예제는 모두 3개의 if문으로 이루어져 있으며 중첩 if문이다.

if(학점 입력) { if(90점 이상일 시) else if (80점 이상일 시) else(그 외)}

 

'JAVA 04강 조건문과 반복문 > 조건문 if, switch' 카테고리의 다른 글

switch조건문  (0) 2021.07.15

+ Recent posts