제어문 - 조건문 (if, switch)

Agnes Park·2022년 1월 23일
0

JAVA

목록 보기
12/34

JAVA의 제어문

  • 프로그램의 흐름 변경 (+ 특정 조건)

1. if ~ else 조건문

1. if, if ~ else 조건문

구문1:
if (조건식) {
조건식이 true 일때 실행되는 문장(들) // 반드시 boolean type 이어야함
...
}

구문2:
if (조건식) {
조건식이 true 일때 실행되는 문장(들)
...
} else {
조건식이 false 일때 실행되는 문장(들)
...
}

public class If01Main {

	public static void main(String[] args) {
		System.out.println("if 조건문");

		int num = 10;
		if(num < 0) {
			System.out.println("음수입니다");
		}
			
		
		int num3 = 124;
		if(num3 % 2 == 0) {
			System.out.println("짝수입니다");
		} else {
			System.out.println("홀수입니다");
		}
		
		
		System.out.println("\n 조건식 (범위)");
		int score = 101;
		
		// if(0 <= num4 <= 100) <-- 자바는 이런 표현식 없음 / 파이썬은 있음
		if(0 <= score && score <= 100) {
			System.out.println(score + "유효한 점수 입니다");
		} else {
			System.out.println(score + "는 유효하지 않은 점수입니다");
		}
		
		System.out.println("\n프로그램 종료");
        
	} // end main()

} // end class

2. if ~ else if ~ else 조건식

  • 구문3:
    if (조건식1) {
    조건식1 이 true 일때 실행되는 문장(들)
    ...
    } else if (조건식2) {
    조건식1 이 false 이고
    조건식2 이 true 일때 실행되는 문장(들)
    ...
    } else if (조건식3) {
    조건식2 가 false 이고
    조건식3 이 true 일때 실행되는 문장(들)
    ...
    } else {
    위의 모든 조건식 모두 false 일때 수행하는 문장(들)
    ..
    }
public class If02Main {

	public static void main(String[] args) {
		System.out.println("if - else if - else");
		
		int kor = 75, eng = 80, math = 83;
		int total = kor + eng + math;
		int avg = total / 3;	// 소수점 버림
		
		System.out.println("평균: " + avg);
		
		// 1. 평균이 90점 이상이면 A학점 (평균: 90 ~ 100)
		// 2. 평균이 80점 이상이면 B학점 (평균: 80 ~ 89)
		// 3. 평균이 70점 이상이면 C학점 (평균: 70 ~ 79)
		// 4. 평균이 60점 이상이면 D학점 (평균: 60 ~ 69)
		// 5. 평균이 60점 미만이면 F학점
		
		
		if(avg >= 90) {
			System.out.println("학점: A");
		} else if(avg >= 80) {
			System.out.println("학점: B");
		} else if(avg >= 70) {
			System.out.println("학점: C");
		} else if(avg >= 60) {
			System.out.println("학점: D");
		} else {
			System.out.println("학점: F");
		}
		

		System.out.println("\n프로그램 종료");
	} // end main()

} // end class

[연습문제]

package 선택제어문.자가진단08;

import java.util.Scanner;

public class Main {

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

		double score = sc.nextDouble();
				
		if (score >= 4.0) {
			System.out.println("scholarship");
		} else if (score >= 3.0) {
			System.out.println("next semester");
		} else if (score >= 2.0) {
			System.out.println("seasonal semester");
		} else {
			System.out.println("retake");
		}
		
		sc.close();
 	}

}

3. 3항 연산자의 조건식

  • 삼항 연산자 (ternary operator)
    (조건식) ? 선택1 : 선택2 // 피연산자 3개, 연산자 3개
    (조건식)이 true 이면 선택1이 선택되고,
    (조건식)이 false 이면 선택2가 선택됨.
public class If04Main {

	public static void main(String[] args) {
		System.out.println("if 문과 삼항 연산자");
		
		int num1 = 145;
		int num2 = 123;
		int big;	// 둘 중에서 큰값을 담아보기
		
		big = (num1 > num2) ? num1 : num2;
		System.out.println("더 큰 수 : " + big);

		
		System.out.println("\n두 수의 차");
		int num3 = -22;
		int num4 = -44;
		int diff = (num3 > num4) ? (num3 - num4) : (num4 - num3);
		System.out.println("두 수의 차 : " + diff);
		
		
		System.out.println("\n프로그램 종료");
	} // end main()

} // end class

4. 중첩된 if (nested-if) 문

  • 조건문 안의 조건문
public class If05Main {

	public static void main(String[] args) {
		System.out.println("중첩된 if (nested-if) 문");
		
		int num = 98;
		
		if(num % 2 == 0) {
			System.out.println("짝수");
			
			if(num % 4 == 0) {
				System.out.println("4의배수");
			} else {
				System.out.println("짝수이지만 4의 배수는 아닙니다");
			}
			
		} else {
			System.out.println("홀수");
			
			if(num % 3 == 0) {
				System.out.println("3의 배수");
			} else {
				System.out.println("홀수이지만 3의 배수는 아닙니다");
			}
			
		}
		
		System.out.println("\n프로그램 종료");
        
	} // end main()

[연습문제]

package 선택제어문.자가진단06;

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
				
		char gender = sc.next().charAt(0);
		int age = sc.nextInt();
		
		if (gender == 'F') {
			if (age >= 18) {
			System.out.println("WOMAN");
			} else {
				System.out.println("GIRL");
			}
			
		} else if(gender == 'M') {
			if(age >= 18) {
			System.out.println("MAN");
			} else {
			System.out.println("BOY");
			}

		}
	
		sc.close();
		
	}	// end main()
	
}	// end class()

5. String 비교, char 비교

  • 문자열 비교는 절대로 == 를 사용하지 말자
  • 문자열 비교는 equals(), equalsIgnoreCase() 사용!
  • char 는 기본적으로 정수값 (아스키 코드값) 이라 일반 산술 비교 가능
public class If07Main {

	public static void main(String[] args) {
		System.out.println("String 비교, char 비교");
	
		String str1 = "john";
		String str2 = "jo";
		str2 += "hn";
		
		System.out.println("str1 = " + str1);
		System.out.println("str2 = " + str2);
		
		// 문자열 비교는 절대로 == 를 사용하지 말자
		if(str1 == str2) {
			System.out.println("== 같습니다");
		} else {
			System.out.println("== 다릅니다");
		}
		
		
		// 문자열 비교는 equals() 사용!
		if(str1.equals(str2)) {
			System.out.println("equals() 같습니다");
		} else {
			System.out.println("equals() 다릅니다");
		}
		
		System.out.println("\n프로그램 종료");
	} // end main()

} // end class

2. switch ~ case 조건문

1. switch (조건값) case

switch (조건값){
case 값1:
...
case 값2:
...
default:
...
}

  • 해당 조건의 case문을 찾아서 거기서부터 break를 만날 때까지 실행을 함.
  • break를 만나게 되면 switch 문장을 종료.
  • 해당하는 case가 없으면 default 문장을 실행함.
    ※ 모든 switch 조건문은 if - else if - else로 바꿀 수 있다. (할 수 있어야 한다)
public class Switch01Main {

	public static void main(String[] args) {
		System.out.println("switch 문");

		int num = 1;
		
		switch(num) {
		case 1:
			System.out.println("하나");
			System.out.println("ONE");
			break;
		
		case 2:
			System.out.println("둘");
			System.out.println("TWO");
			break;
			
		case 3:
			System.out.println("셋");
			System.out.println("THREE");
			break;
			
		default:
			System.out.println("몰라요~");
		}
		
		System.out.println();
		// 모든 switch 조건문 if - else if - else로 바꿀 수 있다.
		// TODO
		
		System.out.println("\n프로그램 종료");
	} // end main()

} // end class

[예시1]

package com.lec.java.switch02;

public class Switch02Main {

	public static void main(String[] args) {
		System.out.println("switch 연습");

		// 도전
		// switch ~ case 조건문을 사용해서
		// 짝수 이면 --> "짝수입니다"  출력
		// 홀수 이면 --> "홀수입니다"  출력

		int num = 99;
		
		switch(num % 2) {
		case 0:	// 짝수
			System.out.println("짝수입니다");
			break;
			
		case 1:
			System.out.println("홀수입니다");
			break;
		}
		
		
		System.out.println("\n프로그램 종료");
	} // end main()

} // end class

2. switch (조건) {case1: case2:}

  • (조건)에 따라서 해당 case로 이동
  • (조건)에 사용될 수 있는 자료 타입은
    1. int로 변환 가능한 타입들: byte, short, int, char
    2. enum 타입(enum 자료형은 Java 5 버전부터 소개)
    3. String 타입 (Java 7 버전부터 switch 문에서 사용 가능)

[예시1 : char 타입]

public class Switch03Main {

	public static void main(String[] args) {
		System.out.println("switch 제약 조건");
		System.out.println("char를 switch문에서 사용");

		char ch = 'C';
		switch(ch) {
		case 'a':
			System.out.println('A');
			break;
		case 'b':
			System.out.println('B');
			break;
		case 'c':
			System.out.println('C');
			break;			
		default:
			System.out.println("몰라요");	// 몰라요 출력. 대/소문자 구별하기 때문
		}
		
		
		// switch(조건) 에 사용할수 없는 값들
//		long num = 1;	// 에러 발생. Cannot switch on a value of type long. Only convertible int values, strings or enum variables are permitted.
//		switch(num) {
//		
//		}

		System.out.println("\n프로그램 종료");
	} // end main()
	
} // end class

[예시2 : String 타입]

package com.lec.java.switch04;

public class Switch04Main {

	public static void main(String[] args) {
		System.out.println("String 타입을 switch에서 사용하기");
		
		String language = "C++";
		
		switch(language) {
		case "Java":
			System.out.println("Hello, Java!");
			break;
		
		case "C++":
			System.out.println("Hello, C++");
			break;
			
		case "Kotlin":
			System.out.println("Hello, Kotlin");
			break;
			
		default:
			System.out.println("많은 개발 언어가 있습니다.");
		
		}

		System.out.println("\n프로그램 종료");
	} // end main()

} // end class

[예시3 : enum 타입]

  • enum 타입 정의하는 방법:
    enum 이름 {}
  • enum 타입 정의 메소드 안에서는 할 수 없다.
  • new -> enum

  • enum: Country.java

package com.lec.java.switch05;

// enum : 나열된 값들을 표현하는 타입(객체)
// 	(enumeration)
public enum Country {
	KOREA, JAPAN, USA, CHINA, RUSSIA
}
  • class : Switch05Main. java
public class Switch05Main {
	
	enum Days {SUN, MON, TUE, WED, THU, FRI, SAT}	// 안에서도 정의 가능	
	enum Numbers {ONE, TWO, THREE}

	public static void main(String[] args) {
		System.out.println("enum 타입을 switch에서 사용하기");
		
		Country cnt1, cnt2;
		cnt1 = Country.KOREA;
		cnt2 = Country.USA;
		
		System.out.println(cnt1);
		System.out.println(cnt2);
		
//		System.out.println(cnt1 + 1);	// 불가
		
		System.out.println(cnt1 + "Hello");
		
		Days day1 = Days.THU;
		Days day2 = Days.MON;

		switch(day1) {
		case SUN:	// enum 타입을 사용하는 switch 에선 enum 타입명을 생략
			System.out.println("일요일");
			break;

		case MON:
			System.out.println("월요일");
			break;
			
		case TUE:
			System.out.println("화요일");
			break;
			
		case WED:
			System.out.println("수요일");
			break;
			
		case THU:
			System.out.println("목요일");
			break;
			
		case FRI:
			System.out.println("금요일");
			break;
			
		case SAT:
			System.out.println("토요일");
			break;
		}
		
		System.out.println("\n프로그램 종료");
	} // end main()

} // end class

0개의 댓글