조건문

박영준·2022년 11월 10일
0

Java

목록 보기
64/112

if 문

1. if 문

예시 1

public static void main(String[] args) {

	int score = 93;

	if(score>=90) {
		System.out.println("점수가 90점보다 큽니다.");
		System.out.println("등급은 A입니다.");
	}

	if(score<90)
		System.out.println("점수가 90점보다 니다.");

예시 2

public static void main(String[] args) {
	int score = 93;

	if(score>=90) {                             
		System.out.println("점수가 90점보다 큽니다.");	// true
		System.out.println("등급은 A입니다.");	// true
	}

	// 여기 if문에는 { }중괄호 블록이 없다. 그래서 이 줄만 출력하도록 적용됐으나, false 이므로 출력되지 않음
	if(score<90)
		System.out.println("점수가 90점보다 작습니다.");	// 이 줄까지만 if 문으로 간주
        
    // if문에 속하지 않는 줄이므로, true/false 와 무관하게 출력됨    
	System.out.println("등급은 B입니다.");
}

/* 실행결과
점수가 90점보다 큽니다.
등급은 A입니다.
등급은 B입니다. */
  • if 문에서 { }중괄호가 없다면, 바로 다음 줄만 if문 안으로 간주하고 출력

예시 3 : { } 의 생략

if(조건식) 명령문;
  • { }
    • 여러 문장을 하나로 묶어준다
    • 만약 if 조건문에서 실행할 문장이 하나라면, if(조건식) 명령문; 이렇게 { } 가 생략될 수 있다

2. if - else문

예시 1

public static void main(String[] args) {

	int score = 85;
           
	if(score>=90) {
		System.out.println("점수가 90점보다 큽니다.");        
		System.out.println("등급은 A입니다.");    
        
	} else {		// false 이므로, 출력
		System.out.println("점수가 90점보다 작습니다.");      
		System.out.println("등급은 B입니다.");  
}

/* 실행결과
점수가 90점보다 작습니다
등급은 B입니다. */
  • if블록, else블록 中 1개만 실행
    • 조건식이 true이면 if문의 블록을 실행,
    • false이면 else 블록을 실행

3. if - else, if - else문

예시 1

public static void main(String[] args) {

	int score = 75;
            
	if(score>=90) {		// false
		System.out.println("점수가 100~90입니다.");        
		System.out.println("등급은 A입니다.");       
        
	} else if(score>=80) {		// false
     System.out.println("점수가 80~89입니다.");        
		System.out.println("등급은 B입니다.");   
        
	} else if(score>=70) {		// true 이므로, 출력
     System.out.println("점수가 70~79입니다.");        
		System.out.println("등급은 C입니다."); 
        
	} else {		// false
     System.out.println("점수가 70 미만입니다.");        
		System.out.println("등급은 D입니다.");
	}
}

/* 실행결과
점수가 70~79입니다.
등급은 C입니다. */
  • 첫 번째 if : 조건식1 의 결과가 참일 때 실행
    두 번째 else if : 조건식2 의 결과가 참일 때 실행
    세 번째 else if : 조건식3 의 결과가 참일 때 실행
    ...
    마지막 else : 위의 어느 조건식에도 만족하지 않을 때 실행

  • else if 는 여러번 사용될 수 있다

  • 모든 조건식이 false 일 경우, else블록 실행하고 if문 벗어남

  • 마지막 else 블럭은 생략이 가능

예시 2

public static void main(String[] args) {

	int num = (int) (Math.random() * 6) + 1;
    
	if(num==1) {
		System.out.println("1번이 나왔습니다."); 
        
	} else if(num==2) {
		System.out.println("2번이 나왔습니다."); 
		.
		.
		.
	} else {
		System.out.println("6번이 나왔습니다.");
	}
}    
  • 코드 2 - int num = (int) (Math.random() * n) + start;
    • 주사위 번호 뽑기 - int num = (int) (Math.random() * 6) + 1;
    • 로또 번호 하나 뽑기 : int num = (int) (Math.random() * 45) + 1;
      (n은 정수의 개수, start는 시작 숫자)

예시 : else if문 (다중 조건 판단)

잘못된 사용

boolean hasCard = true;
ArrayList<String> pocket = new ArrayList<String>();
pocket.add("paper");
pocket.add("handphone");

if (pocket.contains("money")) {
    System.out.println("택시를 타고 가라");
}else {
    if (hasCard) {
        System.out.println("택시를 타고 가라");
    }else {         
        System.out.println("걸어가라");
    }
}

/* 출력 결과
택시를 타고 가라
*/

올바른 사용

boolean hasCard = true;
ArrayList<String> pocket = new ArrayList<String>();
pocket.add("paper");
pocket.add("handphone");

if (pocket.contains("money")) {
    System.out.println("택시를 타고 가라");
}else if(hasCard) {
    System.out.println("택시를 타고 가라");
}else {         
    System.out.println("걸어가라");
}

/* 출력 결과
택시를 타고 가라
*/
  • else if는 이전 조건문이 거짓일 때 수행된다.

  • else if는 개수에 제한 없이 사용할 수 있다.

4. 중첩 if문

예시 1

if (조건식1) { 
         조건식1의 결과가 참일 때 실행하고자 하는 문장;
          if (조건식2) { 
                   조건식1 과 조건식 2의 결과가 모두 참일 때 실행하고자 하는 문장;
           } else { 
                    조건식1의 결과가 참이고, 조건식2의 결과가 거짓일 때 실행하고자 하는 문장;
            }
} else { 
          조건식1의 결과가 거짓일 때 실행하고자 하는 문장;
}

예시 2

class Control1_4 {
    public static void main(String[] args) {
        int score = 87;

        if (score >= 90) {
            if(score >= 95){
                System.out.println("A++등급입니다.");
            }else {
                System.out.println("A등급입니다.");
            }
        } else if(score >= 80) {
            if(score >= 85){
                System.out.println("B++등급입니다.");
            }else {
                System.out.println("B등급입니다.");
            }
        } else if(score >= 70) {
            if(score >= 75){
                System.out.println("C++등급입니다.");
            }else {
                System.out.println("C등급입니다.");
            }
        }else {
            System.out.println("D등급입니다.");
        }
    }
}

예시 3 : 가위바위보

import java.util.Objects;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		System.out.print("A 입력 : ");
		String aHand = sc.nextLine(); // A 입력

		System.out.print("B 입력 : ");
		String bHand = sc.nextLine(); // B 입력

		if (Objects.equals(aHand, "가위")) { // 값을 비교하는 Obects.equals() 메서드 사용
			if (Objects.equals(bHand, "가위")) {
				System.out.println("A 와 B 는 비겼습니다."); // A 와 B 의 입력값을 비교해서 결과 출력
			} else if (Objects.equals(bHand, "바위")) {
				System.out.println("B 가 이겼습니다.");
			} else if (Objects.equals(bHand, "보")) {
				System.out.println("A 가 이겼습니다.");
			} else {
				System.out.println(" B 유저 값을 잘못 입력하셨습니다.");
			}
		} else if (Objects.equals(aHand, "바위")) {
			if (Objects.equals(bHand, "가위")) {
				System.out.println("A 가 이겼습니다.");
			} else if (Objects.equals(bHand, "바위")) {
				System.out.println("A 와 B 는 비겼습니다.");
			} else if (Objects.equals(bHand, "보")) {
				System.out.println("B 가 이겼습니다.");
			}
		} else if (Objects.equals(aHand, "보")) {
			if (Objects.equals(bHand, "가위")) {
				System.out.println("B 가 이겼습니다.");
			} else if (Objects.equals(bHand, "바위")) {
				System.out.println("A 가 이겼습니다.");
			} else if (Objects.equals(bHand, "보")) {
				System.out.println("A 와 B 는 비겼습니다.");
			}
		}

	}
}

/* 입/출력 예시
 A 입력 : 가위
 B 입력 : 보
 A 가 이겼습니다. */

5. 삼항 연산자

  • 삼항 연산자를 사용하여 코드의 라인이 줄어들었다고, 컴파일 속도가 빨라지는 것은 아니다.

  • 삼항 연산자를 중복해서 처리할 경우, 가독성이 떨어질 수 있으므로 중복처리는 피하는 것이 좋다.

예시 1

switch 문

  • if문, switch문 비교

    • if문

      • 조건식 결과 : true/false 만 가능
      • 복합 조건 가능 : () 안에 조건 여러개 지정 가능
      • 상대적으로 코드 중복 多
    • switch문

      • 조건식 결과 : 정수나 문자열만 가능?
      • () 안에 하나의 조건만 가능
      • 상대적으로 코드 중복 小
      • case 문의 값 : 정수, 상수(문자 포함), 문자열만 가능 (중복 불가)
      • if문보다 가독성 좋음

예시 1

switch (조건식) { 
          case1: 
               조건식의 결과가 값1과 같을 경우 수행할 문장; 
               break;
          case2: 
               조건식의 결과가 값2와 같을 경우 수행할 문장; 
               break;
          ...

          default:  
               조건식의 결과와 일치하는 case 문이 없을 때 수행할 문장; 
}
  • default 문은 생략 가능

  • break; 를 만나거나 switch 문이 끝나면, switch 문 전체를 빠져나간다.

예시 2

int num, result;
final int ONE = 1;

switch (result) {
         case '1':         // OK. 문자 리터럴(정수 49와 동일)
         case ONE:         // OK. 정수 상수
         case "YES":       // OK. 문자열 리터럴
         case num:         // Error. 변수는 불가능 
         case 1.0:         // Error. 실수도 불가능
}

예시 3

class Control2_1 {
    public static void main(String[] args) {
        int month = 8;
        String monthString = "";
        switch (month) {
            case 1:  
            	monthString = "January";
                break;
            case 2:  
            	monthString = "February";
                break;
            case 3:  
            	monthString = "March";
                break;
            case 4:  
            	monthString = "April";
                break;
            case 5:  
            	monthString = "May";
                break;
            case 6:  
            	monthString = "June";
                break;
            case 7:  
            	monthString = "July";
                break;
            case 8:  
            	monthString = "August";
                break;
            case 9:  
            	monthString = "September";
                break;
            case 10: 
            	monthString = "October";
                break;
            case 11: 
            	monthString = "November";
                break;
            case 12: 
            	monthString = "December";
                break;
            default: 
            	monthString = "Invalid month";
        }
        
        System.out.println(monthString);
    }
}
  • switch 문의 조건식 : 정수 또는 문자열만 가능

  • case 문의 값

    • 정수 상수(문자 포함), 문자열만 가능
    • 중복 X

예시 4

public static void main(String[] args) {

	int num = (int) (Math.random() * 6) + 1;
    
	switch(num) {              --> 
		case 1:
			System.out.println("1번이 나왔습니다.");
			break;
		case 2:
			System.out.println("2번이 나왔습니다.");
			break;
			.
			.
			.
		default:
			System.out.println("6번이 나왔습니다.");
			break;
	}
}    
  • 경우의 수 多 경우에 switch 문을 사용
    → 변수가 어떤 값을 가지느냐에 따라 실행문이 선택됨

  • switch(변수)

  • 변수 값과 동일한 값을 갖는 case 실행

  • 변수 값과 동일한 값을 갖는 case가 없다면, default로 가기.
    → default는 생략 가능

예시 5

public static void main(String[] args) {

	int num = (int) (Math.random() * 4) + 8;
    
	System.out.println("[현재 시각: " + time + " 시]");
    
	switch(time) {
		case 8:
			System.out.println("출근합니다.");
		case 9:
			System.out.println("회의를 합니다.");
			break;
		case 10:
			System.out.println("업무를 봅니다.");
		default:
			System.out.println("외근을 나갑니다.");
	}
}

/* 실행결과 : time 값이 9일 때
[현재 시각: 9 시]
회의를 합니다.
업무를 봅니다.
외근을 나갑니다. */
  • break가 없는 경우
    • 다음 case를 차례로 실행함
    • switch 문이 끝까지 실행됨

예시 6

System.out.println("어떤 혜택을 원하세요?");		// 무조건 출력되는 부분

char grade = 'C';

switch(grade) {
	case 'A': System.out.println("VVIP 혜택을 받으실 수 있습니다.");
	case 'B': System.out.println("VIP 혜택을 받으실 수 있습니다."); break;
	case 'C': System.out.println("우수 회원 혜택을 받으실 수 있습니다.");
	case 'D': System.out.println("일반 회원 혜택을 받으실 수 있습니다."); break;
	default : System.out.println("혜택이 없습니다.");
}
System.out.println("감사합니다.");		// 무조건 출력되는 부분

/* 실행결과
어떤 혜택을 원하세요?
우수 회원 혜택을 받으실 수 있습니다.
일반 회원 혜택을 받으실 수 있습니다.
감사합니다. */

예시 7 : char타입

public static void main(String[] args) {

	char grade = 'B';
    
	switch(grade) {
		case 'A':
		case 'a':
		System.out.println("우수 회원입니다.");
		break;
		.
		.
		.
    }
}    

예시 8 : String타입

public static void main(String[] args) {

	String position = "과장";
        
	switch(position) {
		case "부장":
		System.out.println("700만원");
		break;
		.
		.
		.
    }    
}        

예시 9 : case문을 묶어서 여러개

class Main {
	public static void main(String[] args) {
    
    switch(month)
    	case 3:
        case 4:
        case 5:
        	System.out.println("봄");
            break;
        case 6: case 7: case 8:
        	System.out.println("여름");
            break;
        ...    
    
	}
}     

조건식 예시


연산자와 조건문

조건문의 조건에 변수뿐만 아니라, 연산자를 활용해서 작성하기도 한다.

참고: 연산자

예시 1

int money = 2000;
if (money >= 3000) {
    System.out.println("택시를 타고 가라");
}else {
    System.out.println("걸어가라");
}

/* 출력 결과
걸어가라
*/

예시 2

int money = 2000;
boolean hasCard = true;

if (money>=3000 || hasCard) {
    System.out.println("택시를 타고 가라");
} else {
    System.out.println("걸어가라");
}

/* 출력 결과
택시를 타고 가라
*/

|| 는 or 을 뜻한다.

List 와 조건문

List 에는 contains 메서드를 사용해서, 값을 검색한다.

참고: 배열, ArrayList - (5) 값 검색

예시 1

ArrayList<String> pocket = new ArrayList<String>();
pocket.add("paper");
pocket.add("handphone");
pocket.add("money");

if (pocket.contains("money")) {
    System.out.println("택시를 타고 가라");
}else {
    System.out.println("걸어가라");
}

/* 출력 결과
택시를 타고 가라
*/

참고: 04-01 if 문
참고: [Java] 삼항연산자 사용법 & 예제

profile
개발자로 거듭나기!

0개의 댓글