조건문 (if, switch~case)

이동주·2025년 3월 1일

JAVA

목록 보기
8/30

if

-> 조건식의 결과에 따라 코드 실행 여부를 결정하는 구문
-> 조건식의 결과가 true이면 if문 실행
-> 조건식의 결과가 false이면 if에서 빠져나감
-> 보통 중괄호를 통해 사용되지만, 중괄호를 사용하지 않을 경우 if문 아래의 첫째줄만 적용된다
-> if문 안에 if문 사용 가능 (다중 if문 사용 가능)
-> 모든 형태의 타입 값을 사용할 수 있음
-> 범용의 성질을 가지므로 논리 오류를 제대로 체크하기가 힘들다
-> 형태
if(조건식) {
실행문
}

else if

-> if의 조건식이 결과가 충족되지 않았을 때 다음으로 실행되는 질문
-> 여러개 사용 가능
-> 형태
else if(조건식) {
실행문
}

else

-> if나 else if의 조건식이 맞지 않았을 때 최종적으로 실행되는 질문

package ch04.sec02;

public class IfExample {
	public static void main(String[] args) {
		int score = 56;
		
		if(score>=90) { // score 값이 90 이상인지 확인
			System.out.println("A");
			System.out.println("90점 이상");
		}
			
		else if(score>=80) { // score 값이 80 이상인지 확인
			System.out.println("B");
			System.out.println("80점 이상");
		}
			
		else if(score>=70) { // score 값이 70 이상인지 확인
			System.out.println("C");
			System.out.println("70점 이상");
		}
			
		else { // 위의 조건 모두 맞지 않으면 실행되는 구문
			System.out.println("D");
			System.out.println("낙제");
		}
			
	}
}

랜덤 함수

Math.random()
-> 0.0보다 크거나 같고 1.0보다 작은 임의의 실수를 도출함
-> Math : 수학 관련 클래스로 수학 관련 기능이 구현됨
-> random() : 난수를 발생함

package ch04.sec02;

public class Ifrandom {
	public static void main(String[] args) {
		int num = (int)(Math.random()*5) + 1;
		// Math.random() : 0.0 <= n < 1.0의 임의의 난수를 받음
		// 실수 형태로 값을 받기 때문에 정수 형태로 출력하기 위해서는 int로 강제 형변환을 시켜줘야함
		// 사용할 숫자의 가짓 수만큼 곱하기 
		// 시작할 숫자만큼 더하기 (1부터 시작하기 위해서는 1을 더하기)
		// 1에서 5까지의 숫자를 임의로 받아 3이 나오면 당첨되는 구문

		if(num == 3) { // num이 3일 경우
				System.out.println("당첨되었습니다.");
			}
		else { // num이 3이 아닐경우
			System.out.println("꽝!");
		}
	}

}
package ch04.sec02;

public class exam03 {
	public static void main(String[] args) {
		int score = (int)(Math.random()*41) + 60; 
		// 정수 60부터 41개의 정수를 받기(100까지)
		System.out.println("점수: " + score);
		
		String grade;
		
		if(score>=90) {
			if(score>=95) // 중첩 if문
				grade = "A+";
			else
				grade = "A";
		}
		
		else if(score>=80) {
			if(score>=85)
				grade = "B+";
			else
				grade = "B";
		}
		
		else if(score>=70) {
			if(score>=75)
				grade = "C+";
			else
				grade = "C";
		}
		
		else {
			if(score>=65)
				grade = "D+";
			else
				grade = "D";
		}
		
		System.out.println("등급: " + grade);
	}

}

Switch~case 문

-> switch문 괄호 안의 변수 값에 따라 해당 case의 실행문을 실행
-> case의 값에 따라 실행 결과의 차이가 있음
-> case값은 정수 또는 문자열만 가능
(byte, short, char, int, long, String)
-> case의 값을 중첩해서 사용할 수도 있음

ex)
switch(변수){
case 값1 :
실행문
break; : 구문을 빠져나오게 하는 역할 (없으면 무한실행,,)
case 값2 :
실행문
break;
default :
실행문 : if문의 else와 기능이 동일

}

package ch04.sec03;

public class SwitchCase1 {
	public static void main(String[] args) {
		double a = Math.random()*6 + 1; //1~6까지의 임의의 난수 얻음
		int num = (int) a; // 난수 값을 정수값으로 변환
		
		System.out.println(a); 
		switch(num) { //switch는 반드시 정수/문자 값만 들어감
			case 1: // 값이 1일 경우
				System.out.println("1번");
				break;
			case 2: // 값이 2일 경우
				System.out.println("2번");
				break;
			case 3: // 값이 3일 경우
				System.out.println("3번");
				break;
			case 4: // 값이 4일 경우
				System.out.println("4번");
				break;
			case 5: // 값이 5일 경우
				System.out.println("5번");
				break;
			default: // 위의 구문에 값이 없는 경우 (else와 동일)
				System.out.println("6번");
				break;
		}
	}

}
package ch04.sec03;

public class SwitchCase2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int time = (int)(Math.random()*4) + 8; 
        // 8부터 11까지의 임의의 수 받음
		System.out.println("현재시간: " + time + "시");
		
		switch(time) {
			case 8 : 
				System.out.println("출근");
			case 9 :
				System.out.println("회의");
			case 10:
				System.out.println("업무");
			default:
				System.out.println("외근"); 
				//break문을 사용하지 않았기 때문에 해당 수의 실행문부터 모두 출력됨
		}

	}

}

중첩 case문의 구조

switch(변수){
case 값1 :
case 값2 :
실행문
break;
}

-> 위의 코드의 경우 값1과 값2의 실행 결과가 같음

package ch04.sec03;

public class SwitchCase {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		char grade = 'd';
		
		switch(grade) {
			case 'A':
			case 'a': // 'A'와 'a'의 값이 나왔을때의 실행문 : or(|) 연산자의 역할을 함
				System.out.println("90점 이상");
				break;
			case 'B':
			case 'b':
				System.out.println("80점 이상");
				break;
			case 'C':
			case 'c':
				System.out.println("70점 이상");
				break;
			default :
				System.out.println("낙제");
		}

	}

}

Expression 형태의 Switch~Case

-> break문을 없애고 '->'를 사용해 가독성을 높인 Switch문!
-> 일반 switch문과 다르게 default문을 생략하면 안됨
-> Java 12 버전부터 사용 가능!
-> 형태
switch(변수){
case 값1, 값2 -> 실행문 (일반 switch문의 중첩 case문과 동일)
case 값3, 값4 -> 실행문
default -> 실행문 (생략 x)
}

switch문을 변수에 대입하여 값을 리턴받기

-> 정수 타입 변수에 switch문을 대입하여 값을 리턴받는 형태
-> yield : 대입 switch문 안에 또 다른 타입의 변수를 선언하여 그 변수값을 대입하는 형태!
-> Java 13 버전부터 사용 가능!

package ch04.sec03;

public class exam04 {
	public static void main(String[] args) {
		String grade = "A";
		
		// Java 11 이전에 사용하던 문법
		int score1 = 0;
		switch (grade) {
			case "A+" :
				score1 = 100;
				break;
			case "A" :
				int result = 100-10; // result라는 임시 변수를 부여함
				score1 = result; // 값을 score1에 대입함
				break;
			case "B" :
				result = 100 - 20;
				score1 = result;
				break;
			case "C" :
				result = 100 - 30;
				score1 = result;
				break;
			default:
				score1 = 60;
		}
		
		System.out.println(score1);
		
		// Java 13부터 사용 가능한 문법 (expression switch문)
				int score2 = switch(grade) { //int 타입의 변수 자체에 switch 문을 대입시키는 것
					case "A+" -> 100; // ->: 표현식 (실행 단위)
					case "A", "a" -> {
						int result = 100 - 10;
						yield result;
					}
					case "B", "b" -> {
						int result = 100 - 20;
						yield result;
					}
					case "C", "c" -> {
						int result = 100 - 30;
						yield result;
					}
					default -> 60;	//표현식 switch문은 default 값이 무조건 존재해야함
				}; // 온전히 int 변수값이므로 ;을 꼭 붙여주기!
		System.out.println(score2);
			
	}
}
profile
끄작끄작

0개의 댓글