아래와 같이 코드를 작성했고,
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int count = 0;
HashMap<String, int[]> studying = new HashMap<>();
HashMap<String, int[]> studyTime = new HashMap<>();
for(int i = 0; i < n; i++) {
String s = sc.nextLine();
String[] str = s.split("[ :]");
String name = str[0];
// ... (코드 생략)
}
아래의 입력값들을 입력하려 했다.

그런데 8 12를 입력하고, jack를 입력하기도 전에
for문의 s에 값이 공백으로 들어가고
ArrayIndexOutOfBoundsException이 발생하는 것을 확인할 수 있었다.(코드 생략된 부분에서)
Scanner.nextInt()은 사용자 입력의 가장 마지막 개행문자(enter)를 제거하지 않고 개행문자 전까지만 숫자로 입력받는다.
그 뒤에 Scanner.nextLine()이 호출되게 되면,
nextInt()에서 처리되지 않은 개행문자가 nextLine()의 입력으로 처리되어 문제가 발생한다.
따라서 nextInt() 뒤에 nextLine()을 사용하려면 개행문자를 제거하기 위해 nextLine()을 한번 더 코드에 추가해주면 된다.
의도했던 nextLine()의 앞에 추가해주면 된다.
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int count = 0;
HashMap<String, int[]> studying = new HashMap<>();
HashMap<String, int[]> studyTime = new HashMap<>();
sc.nextLine();
for(int i = 0; i < n; i++) {
String s = sc.nextLine();
String[] str = s.split("[ :]");
String name = str[0];
// ... (코드 생략)
}
혹은 nextInt() 대신 nextLine()을 이용해 입력받고 Integer.parseInt()를 이용해 int로 바꿔주는 방법을 이용할 수도 있다.
'Java' 카테고리의 다른 글
| [Java] 13. Collection (3) Stack & Queue (0) | 2024.08.23 |
|---|---|
| [Java] 13. Collection (2) List - LinkedList (0) | 2024.08.22 |
| [Java] 13. Collection (1) List - ArrayList (0) | 2024.08.22 |
| [Java] 13. Collection (0) | 2024.08.22 |
| [Java] 12. 제네릭 프로그래밍 (0) | 2024.08.21 |