구마찌의 이진수 여행기
제어문의 모든 것 ( If문과 Switch-case 문 ) 본문
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에 넣어주면 색다른 코드가 나온다!
'JAVA > Java' 카테고리의 다른 글
[Java]인스턴스변수, 클래스변수, 멤버변수 (0) | 2018.10.03 |
---|---|
제어문의 모든 것 ( For문, While문) (0) | 2018.08.15 |
기초 교재 및 진행 방향 (2) | 2018.08.14 |