[Java] 2020.10.27. day_5 제어문_if, if else, else if, switch~case, break

2020. 10. 27. 09:09Web_Back-end/Java SE

제어문 : 프로그램의 순차적인 흐름을 변경하는 문장들

  • 조건문(if, else, switch~case)
    • if문 : 조건을 부여하고 조건이 맞을 때에만 코드를 실행해야할 때
    • 단일 if, if~else, 다중 if 3가지 형태로 사용

 

  1.  단일 if : 조건이 맞을 경우에만 코드를 실행해야 할 때
    • 문법
    • if(조건) { 조건에 맞을 경우 실행되어야 할 코드들 }
  2. 다중 if문( else ~ if ) : 연관성있는 여러 조건을 비교해야할 때
    • 문법
    • if(조건식){조건에 맞을 때 수행할 문장들}
    • else if(조건식){조건에 맞을 때 수행할 문장들}
    • else if(조건식){조건에 맞을 때 수행할 문장들}
    • ....(여기서 끝내도 됨)
    • else{위의 모든 조건에 맞지 않을 때 수행할 문장들}
  3. switch~case : 일치하는 정수를 비교할 때 사용 Java SE 7 (JDK1.7)에서는 문자열도 비교가능
    • 문법
    • switch(변수명){  //변수명 안에 _ byte,short, int, char, String //long은 불가능
    • case 상수 : 변수의 값이 상수와 같을 때 수행문장들;
    • break;
    • case 상수 : 변수의 값이 상수와 같을 때 수행문장들;
    • break;
    • default : 변수의 값에 해당하는 case가 없을 때 수행문장들;
    • }
    • break; ==> switch~case, for, while, do~while 문에서 실행을 멈추고 빠져 나갈 때 사용

▼ if문 사용 예 ▼

package day_1027;
/*
 - 단일 if문 : 조건에 맞을 때에만 코드를 실행해야 할 때
	if(조건식) {
		조건에 맞을 때 수행될 문장들(한줄일 경우 {} 안써도 됨)
	}
*/
class UseIf{
	public static void main(String[] args){
		
		int i = 0;
		i = 27;

		if(i<0){
			//i의 절대값을 보여줌
			i=-i;
			System.out.println("음수가 입력되어 부호변경 수행");
		}//end if

		System.out.println("i는 " + i);

		System.out.println("----------------------------");
		System.out.println("감사합니다");
		//문자열의 비교는 equals method를 사용하여 같은지만 비교할 수 있다
		System.out.println(args[1].equals("java"));
		System.out.println(args[2].equals("자바"));

		


	}//main
}//class

▼ else if 사용 예 ▼_다중 if

package day_1027;
/*
다중 if
else ~ if

입력된 점수의 유효성 검증
0보다 작았을 때, 100보다 컸을 때, 0~100사이일 때의 비교처리
*/
class UseElseIf{
	public static void main(String[] args){
		int score = Integer.parseInt(args[0]);
		// -1, 0~100, 101 경계값 테스트를 해줘야함
		System.out.print(score + "점은 ");

		if(score < 0){//0보다 작은경우
			System.out.println("0보다 작아서 실패하였습니다.");
		}
		else if(score > 100){//100보다 큰 경우
			System.out.println("100보다 커서 실패하였습니다.");
		}
		else{//0~100 사이인 경우(나머지)
			System.out.println("유효점수");
		}

		//자격시험점수 score변수에 들어있다
		//자격시험 점수의 판점
		//과락 : 0~40
		//다른과목점수 참조 : 41~60

		//-1, 0~40(과락테스트), 41~60(다른과목참조 테스트), 61~100(정상합격 테스트), 101~(초과테스트)
		if(score >= 0 && score <= 40){
			System.out.println("과락");
		}
		else if(score > 40 && score < 61){
			System.out.println("다른과목 참조");
		}
		else if(score > 60 && score < 101){
			System.out.println("합격");
		}
		else{
			System.out.println("잘못된 점수의 입력입니다.");
		}


		/* @혼자 푼거 -> 점수 2개 비교해서 과락, 합격 나누기
		int score2 = Integer.parseInt(args[1]);
		int score3 = Integer.parseInt(args[2]);

		if(score2 > 40){
			if(score3 > 40){
				System.out.println("합격입니다");
			}
			else if(score3 <= 40){
				System.out.println(score3 + "점인 과목이 과락입니다");
			}
		}
		if(score3 > 40){
			if(score2 > 40){
				System.out.println("합격입니다");
			}
			else if(score2 <= 40){
				System.out.println(score2 + "점인 과목이 과락입니다");
			}
		}
		else{
			System.out.println("잘못된 점수의 입력입니다.");
		}
		*/
		
		//태어난 해를 두번째 arguments로 입력받아 띠를 구하는 다중 if문
		//태어난 해를 12로 나눈 나머지는 0~12까지의 12개 수로 얻어진다
		//각각의 수에 해당하는 띠는 아래와 같고 띠에대해 출력하는 코드
		//0 : 원숭이, 1 : 닭, 2 : 개, 3 : 돼지, 4 : 쥐, 5 : 소
		//6 : 호랑이, 7 : 토끼, 8 : 용, 9:뱀, 10:말, 11:양
		
		int birth = Integer.parseInt(args[1]);
		int result = birth%12;
		
		System.out.print(birth + "년에 태어난 당신의 띠는 ");
		if(result == 0){
			System.out.print("원숭이");
		}
		else if(result == 1){
			System.out.print("닭");
		}
		else if(result == 2){
			System.out.print("개");
		}
		else if(result == 3){
			System.out.print("돼지");
		}
		else if(result == 4){
			System.out.print("쥐");
		}
		else if(result == 5){
			System.out.print("소");
		}
		else if(result == 6){
			System.out.print("호랑이");
		}
		else if(result == 7){
			System.out.print("토끼");
		}
		else if(result == 8){
			System.out.print("용");
		}
		else if(result == 9){
			System.out.print("뱀");
		}
		else if(result == 10){
			System.out.print("말");
		}
		else if(result == 11){
			System.out.print("양");
		}
		System.out.println("띠입니다.");


	}//main
}//class

▼ if else 사용 예 ▼

package day_1027;
/*
 - if~else : 둘 중 하나의 코드가 반드시 실행되어야 할 때

	if(조건식){
		조건에 맞을 때 수행할 문장들
	}
	else{
		조건에 맞지 않을 때 수행할 문장들
	}
*/
class UseIfElse{
	public static void main(String[] args) {

		int num = Integer.parseInt(args[0]);
		System.out.print(num + "은(는) ");
		if(num>=0){
			System.out.println("양수이다");
		}
		else{
			System.out.println("음수이다");
		}

		//입력받은 수가 "홀수"인지 "짝수"인지 
		if(num%2 == 0){
			System.out.println("짝수");
		}
		else{
			System.out.println("홀수");
		}

		//2. 입력되는 두번째 arguments는 나이입니다
		//입력된 나이를 사용하여 "성년" 또는 "미성년"인지를 출력하는 코드 (19세 이상:성년)
		System.out.println("------------------");
		int age = Integer.parseInt(args[1]);
		System.out.println("입력나이 " + age + "살은 ");
		if(age >= 19){
			System.out.println("성년입니다");
		}
		else{
			System.out.println("미성년입니다");
		}

		//3. arguments로 점수입력, 입력된 정수가 0~100점 사이면 
		//"유효점수" 그렇지 않으면 "잘못된 점수"를 출력
		System.out.println("------------------");
		int score = Integer.parseInt(args[2]);
		System.out.print("입력한 점수");
		if(score>=0 && score<=100){
			System.out.println("는 " + score + "점 입니다");
		}
		else{
			System.out.println("를 올바르게 다시 입력하세요.");
		}

		//4. 네번째 arguments로 언어의 종류가 입력된다 
		//입력된 언어가 Java 또는 Python 또는 C# 일 때에는 "최근 OOP언어"를 출력하고
		//그렇지 않다면 "프로그래밍 언어"를 출력
		System.out.println("------------------");
		if(args[3].equals("Java")||args[3].equals("Python")||args[3].equals("C#")){
			System.out.println("최근 OOP언어");
		}
		else{
			System.out.println("프로그래밍 언어");
		}

		//5. 다섯번째 입력값을 long으로 처리하고(Wrapper class)
		//입력값이 int의 범위일 때는
		//"int"를 출력하고 그렇지 않으면 "long"을 출력하는 코드
		System.out.println("------------------");
		long inputNumber = Long.parseLong(args[4]);
		System.out.println(args[4]);

		if((inputNumber <= Integer.MAX_VALUE) && (inputNumber >= Integer.MIN_VALUE)){
			System.out.println("int의 값");
		}
		else{
			System.out.println("long의 값");
		}

	}//main
}//class

▼ switch ~ case 문 사용 예 ▼

package day_1027;
class UseSwitchCase{

	//Constant: 변수를 상수처럼 사용할 때(가독성향상, 값 변경 불가)
	public static final int GRADE_A_PLUS = 10;
	public static final int GRADE_A = 9;

	public static void main(String[] args) {
		
		String i = "A"; //byte, short, int, char, String(JDK1.7부터 사용가능)
		//case의 상수는 비교용도이기 때문에 위의 case와 인접상수(0,1,2,3)가 아니여도 된다
		//가급적이면 인접상수로 case 작성한다(비교속도 향상)
		switch(i){
			case "A" : 
				System.out.println("A");
				break;
			case "1" : 
				System.out.println("B");
				break;
			case "2" : 
				System.out.println("C");
				break;
			default : System.out.println("Z");
		}

		//입력 점수에 대한 학점 구하기
		//90~100 : A , 80~89: B, 70~79: C, 60~79: D, 0~59 : F
		int score = Integer.parseInt(args[0]);
		char grade = 'F';
		//최종 학점 저장

		System.out.print(score + "점은 ");
		switch(score/10){
			case 10 :
				grade = 'A';
				break;
			case 9 : 
				grade = 'A';
				break;
			case 8 : 
				grade = 'B';
				break;
			case 7 : 
				grade = 'C';
				break;
			case 6 : 
				grade = 'D';
				break;
			default :
				grade ='F';
				
				break;
		}//switch
		System.out.println(grade + "학점입니다.");

		System.out.println("------------------------");
		grade = 64;
		//최종 학점 저장

		System.out.print(score + "점은 ");
		switch(score/10){
			case 6 : 
				grade++;
			case 7 : 
				grade++;
			case 8 : 
				grade++;
			case 9 : 
			case 10 : 
				grade++;
				break;
			default : 
				grade+=6;
		}//switch
		System.out.println(grade + "학점입니다.");

	}
}