프로젝트/트러블슈팅

[JAVA]입력 버퍼비우기 - (Next() , NextLine())

코딩로봇 2025. 3. 5. 14:03

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() 코드가 잘 작동하였다!