Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 코드스테이츠 #회고록
- JAVA기본
- String
- 정리글 작성법
- 회고록_코드스테이츠
- jvm
- OOP
- 시작 #꾸준히 #과하지않게
- 코드스테이츠 #
- 에러해결
- 코딩테스트
- WSL #Linux #ubuntu
- 롤중독
- Git #회고록
- 사용자계정 #WSL2
- 글 foramt
- git #intellij
- mapstruct
- 인터넷 #ISP
- WSL2 #권한
- Java환경
- 공부방식
- 회고록
- 피드백
- 네트워크 기초
- 호스트주소 #Host주소
- 회고 #주간회고
- 백엔드로드맵
- 회고
- 몰입학습 #몰입
Archives
- Today
- Total
느리더라도 꾸준히
[Java기본]while문속의 switch문과 break; 본문
목표
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문에게 현재 상태를 알려 루프를 탈출 할 수 있습니다.
'Java' 카테고리의 다른 글
[Java기본]static 메서드는 왜 필요할까? (0) | 2022.11.06 |
---|---|
[JVM]변수 선언과 할당시 관점으로 JVM 동작 이해하기 (0) | 2022.11.04 |
[배열]배열 복사 메서드 비교하기 (0) | 2022.11.03 |
[String]equal(), compareTo(), == 비교하기 (0) | 2022.11.01 |
[String]String 선언 방식 비교 (0) | 2022.10.31 |
Comments