반응형
nextint() 입력 후 nextLine()을 사용 시에 입력관련 오류가 생긴다.
이유는 콘솔 입력시에 엔터키를 입력 했을 때만 지금까지 눌렀던 내용이 버퍼에 전달되어 저장이 되는데, nextInt의 메서드
는 int값만 가져간 후 구분자를 받지 않는다.
때문에 이후 \n의 구분자를 통해 입력을 구분하는 nextLine메서드를 사용할 경우 해당 부분에서 문제가 생긴다. nextLine의 첫번째 입력을''\n의 상태로 입력을 받는 것이다.
아래는 해당 부분의 코드 예제이다.
1 2 3 4 5 6 7 8 9 | Scanner sc = new Scanner(System.in); int n; n = sc.nextInt(); String[] s = new String[n]; for(int i = 0; i < n; i++) { s[i] = sc.nextLine(); // 이 부분에서 s[0]에 ''가 저장이된다. } | cs |
이러한 오류를 해결할 방법은 알아본 바로는 두가지가 있는데,
첫번째는
1 2 3 4 5 6 7 8 9 10 | Scanner sc = new Scanner(System.in); int n; n = sc.nextInt(); sc.nextLine();//해당부분 줄 String[] s = new String[n]; for(int i = 0; i < n; i++) { s[i] = sc.nextLine(); // 이 부분에서 s[0]에 ''가 저장이된다. } | cs |
이렇게 nextLine()을 한줄 추가해서 방지하는 것과
1 2 3 4 5 6 7 8 9 | Scanner sc = new Scanner(System.in); int n; n = n = Integer.parseInt(sc.nextLine());//nextLine을 사용해서 int형식 String[] s = new String[n]; for(int i = 0; i < n; i++) { s[i] = sc.nextLine(); // 이 부분에서 s[0]에 ''가 저장이된다. } | cs |
위와 같이 아예 nextLine()을 통해 int형을 입력받는 방법이다.
가장 깔끔한 방법은 두번째 방법인 듯 하다.
문제풀다가 멘붕와서 서치한 내용을 토대로 정리 완!
요약 : nextInt에는 \n의 개행문자가 들어가지 않음. 때문에 다음 nextLine사용 시 해당 enter(\n)구분자를 가져가기에
nextLine을 바로 아랫줄에 넣어 초기화 시켜주거나 Integer.parseInt(sc.nextLine());의 형식으로 입력을 받아야 함
반응형
'공부 > Java' 카테고리의 다른 글
자바 프로젝트를 실행할 때(배포) (0) | 2024.08.18 |
---|---|
우테코 프리코스 6기 1주차 숫자야구 회고 (0) | 2023.10.26 |
자바의정석 ch14 람다와 스트림 (0) | 2023.09.18 |
BufferedReader, StringTokenizer (0) | 2023.01.14 |