Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

구마찌의 이진수 여행기

제어문의 모든 것 ( If문과 Switch-case 문 ) 본문

JAVA/Java

제어문의 모든 것 ( If문과 Switch-case 문 )

구마찌 2018. 8. 15. 18:02



IF

- 기본적으로 if-else if 구문으로 이루어 진다. 특정한 범위를 지정해 제어를 해줄 때 유리하다.


SWITCH-CASE

- switch에는 '정수형'이 들어가야 하고 case의 조건에도 '정수형'이 들어간다. 

- 눈으로 보이기에 예외사항이 있어보이는 구문이 있어서 조금 있다가 분석할 예정


   import java.util.Scanner;

public class FlowEx5 {
	public static void main(String[] args) {
		int score = 0;
		char grade = ' ', opt = '0';
		
		System.out.println("점수를 입력해주세요.");
		
		Scanner sc = new Scanner(System.in);
		score = sc.nextInt();
		
		System.out.println("당신의 점수는  "+ 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.println("당신의 학점은 " + grade + opt + "입니다.");
	}
}



> 예제 소스코드에 나와있는 것처럼 점수의 구분을 짓기위한 거 쉽게 말해서 범위를 나눠서 평가를 해야할 때는

case 하나하나 정의해 주는 switch보다는 if문이 낫다고 생각한다.



 import java.util.Random;
import java.util.Scanner;

public class FlowEx7 {
// 컴퓨터랑 나랑 가위바위보~ 
	public static void main(String[] args) {
		System.out.println("가위(1), 바위(2), 보(3) 중 하나를 입력하세요.");
		
		int com, me;
		Scanner sc = new Scanner(System.in);
		Random r = new Random();
		
		com = r.nextInt(3) + 1;
		me = sc.nextInt();
		
		System.out.println("당신은 " + me + "입니다.");
		System.out.println("COM은 " + com + "입니다.");
		
		switch(me - com) {
		case 2: case -1:
			System.out.println("당신은 졌습니다.");
			break;
		case 1: case -2:
			System.out.println("당신은 이겼습니다.");
			break;
		case 0:
			System.out.println("비겼습니다.");
		}
	}
}


> 정말 신기하다고 생각했던 것이 뭐냐면 나는 가위바위보 게임이라고 했을 때 오로지 if-else if로 케이스를 나누어 하드코딩 하려고 생각을 했었다. 하지만 컴퓨터의 랜덤 값과 나의 입력값의 연산을 통해서 switch-case문으로 쉽게 바꿨다는 것이 너무 효율적이라고 생각한다. 

 

/*

 나는 Random 클래스를 이용해서 난수를 뽑아내는 방법 밖에 생각하지 못했는데, Math.random() 이라는 메소드를 이용해서 0.0~0.1까지의 랜덤한 double형의 난수를 뽑아낼 수 있다는 것도 처음 알았다. 

*/

import java.util.Scanner;

public class FlowEx8 {

	public static void main(String[] args) {
		System.out.println("당신의 주민번호를 입력하세요. 000000-0000000");
		
		Scanner sc = new Scanner(System.in);
		String regNo = sc.next();
		
		char gender = regNo.charAt(7);
		
		switch(gender) {
		case '1': case '3':
			System.out.println("당신은 남자입니다.");
			break;
			
		case '2': case '4':
			System.out.println("당신은 여자입니다.");
			break;
			
		default: 
			System.out.println("잘못 입력하셨습니다.");
				
		}
		
	}
}


> 주민번호를 입력해서 남자인지 여자인지 확인하는 코드가 있다. 


"아니.. 정수형만 가능한데 왜 저기다가 따옴표를 넣는거야 참.."


> 문자열 말고 문자는 정수다! 홑따옴표가 있는 문자는 정수다! 

' ' 안의 문자는 유니코드로 이루어진 하나의 정수이다. 다른 언어는 잘 모르겠지만 Java에서는 유니코드를

제공하기 때문에 ' '안의 문자를 정수로 본다.



+) 아까 말했던 '범위를 나누어 제어를 해야하는 구문'에 반기를 들 수 있는 예제가 여기있다! 


import java.util.Scanner;

public class FlowEx10 {

	public static void main(String[] args) {
		int score = 0;
		char grade = ' ';
		
		System.out.println("당신의 점수를 입력하세요.(1~100)");
		
		Scanner sc = new Scanner(System.in);
		String tmp = sc.next();
		score = Integer.parseInt(tmp);
		
		switch(score/10) {
		case 10:
		case 9:
			grade = 'A';
			break;
		case 8:
			grade = 'B';
			break;
		case 7:
			grade = 'C';
			break;
		default:
			grade = 'F';
		}
		
		System.out.println("당신의 학점은 " + grade + "입니다.");
	}
}

> 이 또한 아까 가위바위보 게임과 같이 switch 안에 연산된 정수를 넣어서 case에 넣어준다. int / int 를 하게되면 int 값만 나오기 때문에 case문의 조건으로 적어줄 수 있다. 굳이 부분을 나누어서 할 필요 없이 (if문 처럼) 나누기 한 몫을 가지고 int형 값을 case에 넣어주면 색다른 코드가 나온다!




Comments