- 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에서 엔터를 같이 버퍼에서 지우기 때문에 다음 입력에 엔터가 남아 입력이 원하는대로 되지 않는 등의 오류를 방지해준다
+ 그치만 아직 뭔가 헷갈린다... 적용을 많이 해보면서 더 익혀야할듯