intro
- 프로젝트를 진행하며 발생한 문제 상황과 해결 과정들을 상세히 기록하고 추후에 같은 문제가 발생 했을때 빠르게 문제 해결하기 위해 트러블 슈팅을 정리할려고 한다.
- 기록하는 습관을 기르기 위해 프로젝트 기간동안 꾸준히 작성할 것 이다.
간단한 계산기 만드는 과정에서 Scanner 함수를 이용해 문자를 입력받는 기능이 있다.두 개의 숫자를 입력받고 사칙연산자를 입력받지만 NextInt() 로 숫자를 입력 받은후 사칙연산을 받지 못하는 오류가 발생하였다!.
문자를 입력받는 Next() 에서 오류가 발생한듯 한데 필수적으로 쓰이는 메소드인 만큼 확실하게 이해하기 위해 트러블 슈팅으로 작성해볼려고 한다.
⚠️ 1.문제 상황 발생
숫자와 사칙연산자를 입력하고 값을 출력했지만 계속하기와 종료를 입력하는 nextLine() 부분이 그냥 넘어가버렸다.
🔎 2.원인 추론
사칙연산자를 입력하기 위해 예를 들면 '+' + 'Enter' 키를 누르게 되는데 Enter 키가 nextLine() 으로 입력되어 넘어가는게 아닐까 추론했다.
2-1.next(),nextInt() 메소드 특성 이해하기
Scanner sc = new Scanner(System.in);
int num = 0;
System.out.println("숫자를 입력하세요");
num = sc.nextInt();
System.out.println(num);
해당 코드에 만약 5 4를 띄워서 입력했다면 / (공백) 을 기준으로 앞쪽인 5만 인식하게 되고 뒤에 4는 버퍼에 남게 된다.
2-2 nextLine() 메소드 특성 이해하기
Scanner sc = new Scanner(System.in);
String korean = "";
System.out.println("한글을 입력하세요");
korean =sc.nextLine();
System.out.println(korean);
해당 코드에 만약 "한글을 입력했습니다"를 입력했다면 /(공백)을 포함하여 모든 문자를 입력받게 된다.
📝 3.해결방안
사칙 연산 입력후 엔터를 누르면 엔터가 버퍼에 남기 때문에 버퍼를 비워줬다.
NextLine() 은 공백을 포함한 문자를 입력받고 버퍼를 비워주는 기능을 하기 때문에 NextInt() 밑에 입력해주었다.
📌4.결과 확인
버퍼를 비워주니 사칙연산자 입력코드 아래있는 nextLine() 코드가 잘 작동하였다!
'프로젝트 > 트러블슈팅' 카테고리의 다른 글
[Spring]무한 스크롤 + Enum 정렬 트러블슈팅 (2) | 2025.04.23 |
---|---|
[Spring/Security] 403 Forbidden? 권한 문제가 아니라 CSRF 이 원인이였다 (0) | 2025.04.21 |
[Spring]Filter 예외처리 (0) | 2025.04.03 |
[JAVA]Enum 에 선언된 메소드 호출오류 (0) | 2025.03.13 |
[JAVA]리스트 초기화 오류 (1) | 2025.03.05 |