10951번 문제를 풀다가 hasNextInt()
라는 메서드를 처음 알게되었다.
Buffer를 이용해서 해결하려고 했는데, 도저히 해결할 수 없었고, 구글링해서 hasNextInt()
라는 함수를 알게되었다. hasNext()
는 Scanner
의 내장 함수인데, 스캐너 객체로 데이터가 들어왔는지 여부를 반환하는 함수이다.
문제에 대한 정답 코드이다.
1 | public static void main(String[] args) { |
스터디에서 코드 리뷰를 해봤는데 아직 sc.nextInt()
에 값이 안들어왔음에도 while문이 어떻게 동작할 수 있었는가 라는 질문이 나왔다. 그래서 인텔리J에서 함수를 클릭하여 어떻게 동작하는지를 살펴보았다.
먼저 hasNextInt()
이다.
1 | public boolean hasNextInt(){ |
위 함수는 boolean 값을 반환하는데 여기서 반환되는, 파라미터를 갖고있는 hasNextInt()
라는 함수를 찾아보면 또 다음과 같다.
1 | public boolean hasNextInt(int radix) { |
어떤 데이터타입이든 일단 데이터가 hasNextInt()
로 들어오게 되면, try catch문을 통해 예외처리를 하는 것 같다.
다시 처음 위의 hasNextInt()
함수에서 반환되는 boolean값의 파라미터인 defaultRadix를 확인해보면 다음과 같다.
1 | // The default radix for this scanner |
Scanner
객체의 기본 정수형 인자(?)인것 같다.
아직 키보드가 입력받지 않았음에도 스캐너 객체가 생성될 수 있었던 이유가 defaultRadix가 10이었기 때문이었다.