Java
[Java기본]while문속의 switch문과 break;
테디규
2022. 11. 3. 15:18
목표
while 문속의 switch를 사용하게 될때 발생하는 문제와 해결방안을 생각해봅시다.
본문
먼저 아래 코드를 봅시다.
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("====연산자만 입력해주세요====");
String operatorWord = input.next();
while(true){
switch (operatorWord){
case "+":
case "-":
case "*":
case "/":
break;
default: {
System.out.println("연산자를 다시 입력해주세요");
operatorWord = input.next();
continue;
}
}
}
}
입력된 값이 연산자가 아니라면, 연산자를 넣어줄때까지 반복시키는 로직을 수행하려고 했습니다만, 무한루프가 발생하고 있습니다. 이유가 무엇일까요?
일반적으로 break; 문은 주로 반복문을 멈추는데 사용됩니다. 그러나 조건문인 switch문에서도 case를 빠져나갈때 break; 사용하게 됩니다. 그러므로 위 코드는 switch 문을 빠져나가느라 while을 탈출하지 못하고 있는 것입니다.
해결책1 - outerloop 사용하기
import java.util.Scanner;
public class switchTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("====연산자만 입력해주세요====");
String operatorWord = input.next();
outerloop:
while(true){
switch (operatorWord){
case "+":
case "-":
case "*":
case "/":
break outerloop;
default: {
System.out.println("연산자를 다시 입력해주세요");
operatorWord = input.next();
continue;
}
}
}
}
}
반복문에 이름을 명명하여, break으로 해당 반복문을 빠져나오게 할수 있습니다.
해결책2 - boolean 변수 사용하기
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("====연산자만 입력해주세요====");
String operatorWord = input.next();
boolean isOperator = false;
while(!isOperator){
switch (operatorWord){
case "+":
case "-":
case "*":
case "/":
isOperator=true;
break;
default: {
System.out.println("연산자를 다시 입력해주세요");
operatorWord = input.next();
continue;
}
}
}
}
boolean 값을 이용해 현재 상태를 나타내고, while문에게 현재 상태를 알려 루프를 탈출 할 수 있습니다.