카테고리 없음

자바 입력받기 주의점 (nextInt, nextLine)

wosrn 2023. 5. 19. 19:48
  • nextInt() -> System.in으로 입력 받은 값 중 공백(스페이스바)전까지 입력된 int값만을 반환한다(스페이스키, tab키, enter키는 남겨짐)
  • next() -> System.in으로 입력 받은 값 중 연속된 문자열값만 공백 전까지 반환 / 토큰 개념을 사용하여 공백을 구분자로 인식(스페이스키, tab키, enter키는 남겨짐)
  • nextLine() -> System.in으로 입력 받은 값 중 문자열 모두를 return을 포함해 반환한다. / 한 줄 단위로 입력을 받는데 그 과정에서 개행자(엔터)를 포함하게 됨
  •  nextLine()메소드는 Enter를 치기 전까지 쓴 문자열을 엔터와 함께모두 리턴하는 반면 next() 메소드는 스페이스 즉 공백 전까지 입력받은 문자열만을 리턴한다는 것이다. 

 

1. nextInt를 여러줄 입력할 때는 수를 스페이스바로 구분해서 입력해도 엔터로 구분해서 입력해도 관계없이 잘 입력된다

 

ex)13 입력 후 엔터 : 13까지 반환하고 리턴은 그냥 System.in에 남아있는다 -> 그 다음줄에 30을 입력하고 엔터를 치면 스캐너는 이전 리턴,3,0,리턴 이렇게 입력을 받고 30을 반환하고, 또 리턴은 system.in에 그냥 남아있는다

 

2. 그런데 이 다음으로 nextLine을 호출하고 life를 입력하면, nextLine은 남아있던 리턴을 반환하기 때문에 그 리턴까지만 반환하고 입력한 life는 그냥 버퍼에 남아있는다 = 결론적으로 공백이 입력되는 셈

 

3. 이러한 오류를 방지하는 방법

1)nextLine 직전에( nextInt()나 next() 다음에) nextLine을 한번 더 써서(엔터 먹어가기 코드) 공백을 버퍼에서 지워준다

2)숫자까지 전부 nextLine()으로 입력받은 후 Integer.parseInt()로 형변환 : int a = Integer.parseInt(scan.nextLine()); -> 이때 nextLine에서 엔터를 같이 버퍼에서 지우기 때문에 다음 입력에 엔터가 남아 입력이 원하는대로 되지 않는 등의 오류를 방지해준다

 

 

+ 그치만 아직 뭔가 헷갈린다... 적용을 많이 해보면서 더 익혀야할듯