Java

[Java] 조건문

gorusair 2021. 12. 16. 12:13

조건문 - if, switch

if 문

if 문은  가장 기본적인 조건문이며, '만일(if) 조건식이 참(true) 이면 괄호{ } 안의 문장들을 수행하라'  

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

 

if (score > 60 ) {
	System.out.println("합격입니다.");
    }
    
 score  > 60 
 80     > 60 
 true  // 조건식이 참이므로 괄호 안의 문장이 실행된다.
package ch04;

public class FlowEx1 {
	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");
		if(!(x==0)) System.out.println("!(x==0)");
		if(!(x!=0)) System.out.println("!(!x=0)");
		
		x=1;
		System.out.printf("x=%d 일떄, 참인 것은 %n",x);
		
		if(x==0) System.out.println("x==0");
		if(x!=0) System.out.println("x!=0");
		if(!(x==0)) System.out.println("!(x==0)");
		if(!(x!=0)) System.out.println("!(!x=0)");
	}

}
x=0 일떄, 참인 것은 
x==0
!(!x=0)
x=1 일떄, 참인 것은 
x!=0
!(x==0)
package ch04;

import java.util.*;// Scanner 클래스를 사용하기 위해 추가
public class FlowEx2 {
	public static void main(String[] args) {
		int input;
		
		System.out.print("숫자를 하나 입력하세요.>");
		
		Scanner scanner = new Scanner(System.in);
		String tmp = scanner.nextLine(); //화면을 통해 입력받은 내용을 tmp에 저장
		input = Integer.parseInt(tmp);   //입력받은 문자열(tmp)을 숫자로 변환
		
		if(input==0) {
			System.out.println("입력하신 숫자는 0입니다.");
		}
		
		if(input !=0) 
			System.out.println("입력하신 숫자는 0이 아닙니다.");
			System.out.printf("입력하신 숫자는 %d입니다.", input);
		
	}

}

if-else문

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

import java.util.*;
public class FlowEx3 {
	public static void main(String[] args) {
		System.out.print("숫자를 하나 입력하세요");
		Scanner scanner = new Scanner(System.in);
		int input = scanner.nextInt(); //화면을 통해 입력받은 숫자를 input에 저장
		
		if(input ==0) {
			System.out.println("입력하신 숫자는 0입니다");
		} else { //input ! = 0 인 경우
			System.out.println("입력하신 숫자는 0이 아닙니다.");
		}
	}
}
숫자를 하나 입력하세요5
입력하신 숫자는 0이 아닙니다.

숫자를 하나 입력하세요0
입력하신 숫자는 0입니다

if-else if 문

처리해야할 경우의 수가 셋 이상인 경우 사용한다.

if(조건식1){
	// 조건식1의 연산결과가 참일 떄 수행될 문장들을 적는다.
 } else if (조건식2){
 	// 조건식2의 연산결과가 참일떄 수행될 문장들을 적는다.
 } else if (조건식3){            //여러 개의 else if를 사용할 수 있다.
 	// 조건식3의 연산결과가 참일 떄 수행될 문장들을 적는다.
 } else { // 마지막에는 보통 else 블럭으로 끝나며, else 블럭은 생략 가능하다.
 	//위의 어느 조건식도 만족하지 않을 때 수행 될 문장들을 적는다.
 }
package ch04;

import java.util.*;
public class FlowEx4 {
	public static void main(String[] args) {
		int score = 0; //점수를 저장하기 위한 변수
		char grade = ' '; // 학점을 저장하기 위한 변수. 공백으로 초기화 한다.
		
		System.out.print("점수를 입력하세요.>");
		Scanner scanner = new Scanner(System.in);
		score = scanner.nextInt(); //화면을 통해 입력받은 숫자를 score에 저장
		
		if(score >=90) {
			grade ='A';
		} else if (score >=80) {
			grade ='B';
		} else if (score >= 70) {
			grade = 'C';
		} else { 
			grade = 'D';
		}
		System.out.println("당신의 학점은" +grade + "입니다.");
	}

}

실행결과 1 
점수를 입력하에요 > 70
당신의 학점은 C입니다.

점수를 입력하세요.>63
당신의 학점은D입니다.

중첩 if 문

 

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

 

if(조건식1){
	// 조건식1의 연산결과가 true일 떄 수행될 문장들을 적는다.
    if(조건식2){
    	// 조건식1과 조건식2가 모두 true일 떄 수행될 문장들
        } else {
        // 조건식 1이 true이고, 조건식2가 false일 때 수행되는 문장들
        }
 } else {
  // 조건식 1이 false일 때 수행되는 문장들
  }
  
  
  if(num >=0){
    	if (num ! =0)
    		sign = '+';
   } else {
    	sign = '-';
    }
package ch04;

import java.util.*;
public class FlowEx5 {
	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(); // 화면을 통해 입력받은 점수를 score에 저장
		
		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 if (score < 84) {
				opt = '-';
			}
		} else {
			grade ='C';
		}
		
		System.out.printf("당신의 학점은 %c%c입니다.%n", grade, opt);
	}

}
점수를 입력해주세요>100
당신의 점수는 100입니다.
당신의 학점은 A+입니다.

점수를 입력해주세요>81
당신의 점수는 81입니다.
당신의 학점은 B-입니다.

점수를 입력해주세요>85
당신의 점수는 85입니다.
당신의 학점은 B0입니다.

switch문

switch문은 단 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하므로 알아보기 쉽다.
따라서 처리할 경우의 수가 많은 경우에는 if문 보다 switch문으로 작성하는 것이 좋다.

 

switch ( 조건식 ) {
	case 값1: 
    		// 조건식의 결과가 값1과 같을 경우 수행될 문장들
            //...
            break;
    case 값2 :
    		// 조건식의 결과가 값2와 같을 경우 수행될 문장들
            //...
            break;  // switch문을 벗어난다.
            
         //...
         default : 
         	// 조건식의 결과와 일치하는 case문이 없을떄 수행될 문장들
            // ...
   }

switch 문의 제약조건

  1. switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
  2. case문의 값은 정수 상수만 가능하며, 중복되지 않아야 한다.
public static void main(String[] args){
	int num, result;
    fianl int ONE = 1;
    	...
    switch(result){
    	case '1':           //OK. 문자 리터럴(정수 상수 49와 동일
        case ONE:           //OK. 정수 상수
        case "YES": 		//OK. 문자열 리터럴. 
        case num :          //에러.변수는 불가
        case 1.0 :          //에러. 실수도 불가
        ...
        
        }
package ch04;

import java.util.*;
public class FlowEx6 {
	public static void main(String[] args) {
		System.out.print("현재 월을 입력하세요.>");
		
		Scanner scanner = new Scanner(System.in);
		int month = scanner.nextInt(); //화면을 통해 입력받은 숫자를 month에 저장
		
		switch (month) {
			case 3:
			case 4:
			case 5:
				System.out.println("현재의 계절은 봄입니다.");
				break;
			case 6: case 7: case 8:
				System.out.println("현재의 계절은 여름입니다.");
				break;
			case 9: case 10: case 11:
				System.out.println("현재의 계절은 가을입니다.");
			default:
			case 12: case 1: case 2:
				System.out.println("현재의 계절은 겨울입니다.");
		}

	}
}
현재 월을 입력하세요.>3
현재의 계절은 봄입니다.