우리는 간단한 조건식을 통하여 if문의 유용성에 대해 day-5에서 알아보았다. 앞으로 클래스에 들어가는 메서드에서 필드와 변수를 작성 간에 if문을 사용 할 것이다.
예를 들어 간단하게 메서드에서 매개변수가 int money를 받아오고 이 매개변수가 0보다 작거나 같을때 "잔액이 부족합니다."라고 메시지를 출력하고 그 외에 조건을 실행하는 문장을 만들면 간단하게 잔액을 받아 실행시키는 메서드를 완성 시킬 수 있다. if조건문 뿐만아니라 간단하게 표현이 가능한 메서드에서는 while과 switch를 활용하면 코드를 절약할 수 있다.
그러면 이제
제어문의 if 조건문에 이어서 다음 switch와 while문에 대해서 알아보자
switch는 마치 우리의 생활에서 사용하는 스위치 버튼처럼 사용할 수 있게 짜여진 코드이다.
switch 안에는 case가 있으며 case의 갯수만큼 써주면 실행되는 case가 늘어난다. 보통 switch의 매개변수는 정수타입으로 받으면 이 정수가 실행되는 case를 결정한다.
타입은 변경가능
사용방법은 다음과 같다.
switch(변수명){
case 값:
case 값:
case 값:
....
default
}
간단한 심리검사 문진을 만들어보자
먼저 질문을 만들고 각 질문에 대한 답은 case에다가 담아서 출력하면 되겠다.
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String q = "Q. 오늘은 당신의 생일입니다. \n 친구에게 상자를 선물로 받았습니다. \n "
+ "이 상자 안에는 무엇이 들어 있을까요?\n나가기: q\n"
+ "1. 꽃\n"
+ "2. 손수건\n"
+ "3. 깜짝 상자\n"
+ "4. 보석\n";
String answer1 = "꽃: 당신은 거짓말을 못해서 안합니다.";
String answer2 = "손수건: 당신은 너무 정직한 사람입니다.";
String answer3 = "깜짝 상자: 당신은 눈 하나 깜짝안하고 거짓말을 하는 사람입니다.";
String answer4 = "보석: 당신은 때에 따라 가끔씩은 거짓말을 합니다.";
String choice ="";
while(true) {
System.out.println(q);
choice = sc.next();
if(choice.equals("q")) {
System.out.println("종료");
break;
}
switch(choice) {
case "1":
System.out.println(answer1);
break;
case "2":
System.out.println(answer2);
break;
case "3":
System.out.println(answer3);
break;
case "4":
System.out.println(answer4);
break;
default :
System.out.println("?");
}
}
}
}
여기서 case는 문자열로 받을때는 따옴표를 붙여야 된다!
또한 default값은 설정 안해도 되지만 사용자가 1~4 외의 숫자를 입력 할 수 있으니 defalut 값을 설정하자
case가 문자열로 받은 이유는 q를 사용해서 나가기를 설정하기 위해서 문자열로 하였으며 choice는 문자열로 초기화하고 문자열을 담아내는 next();를 사용하였다. 만약 정수라면 nextInt();
각 case별로 break;가 있는 이유는 break가 없으면 case 1을 선택하면 아래로 case2, 3, 4까지 모두 실행된다.
컴파일을 할때는 위에서 아래로 실행되기 때문...
while문은 위에서 사용했든 어떤 문장을 반복할 필요가 있을 때 while문을 사용하며 조건식을 걸어 break;를 만나게 하여 while반복을 끝낼 수 있다.
또는 while에 들어가는 매개변수는 boolean 타입으로 조건식에 따라 참, 거짓을 두어 반복문을 통제 할 수 있다.
while(true) {
System.out.println(q);
choice = sc.next();
if(choice.equals("q")) {
System.out.println("종료");
break;
}
switch(choice) {
case "1":
System.out.println(answer1);
break;
case "2":
System.out.println(answer2);
break;
case "3":
System.out.println(answer3);
break;
case "4":
System.out.println(answer4);
break;
default :
System.out.println("?");
}
}
위에서 작성한 코드 중 일부 발췌한 내용이다.
while(true){
반복할 문장;
}
위와 같은 표현식으로 작성 되어 있으며 true는 반복을 계속 한다는 의미이다. 반복을 멈추기 위해 if조건문에 choice.equals("q")를 사용하여 참일때 break;를 설정하였다.
equals는 뒤에나오지만 간단히 설명하면 == 연산자는 값의 주소값을 비교하여 참, 거짓을 판단하고 equals는 내용 자체를 비교하는 비교 연산자이다.
쉽게 말해 ==는 값이 같아보여도 주소값이 다르면 다르다고 함.