nextLine()은 엔터 기준으로 그 전까지 입력한 모든 내용을 가져와서 String 타입으로 반환을 해준다. 이 때
N = scanner.nextInt();
arr = new int[N][N];
num = new int[N * N];
for (int i = 0; i < N; i++) {
String a = scanner.nextLine();
for (int k = 0; k < N; k++) {
arr[i][k] = a.charAt(k) - 48;
}
}
이런 식으로 먼저 정수를 입력받고 문자열을 입력받는 다고 할 때 정수 입력받은 것도 엔터로 불러들인 것이라고 인지하여 문자열로 가져온다. 그래서 N번의 문자열을 입력받고 싶었지만 이미 맨 첨에 돌아갈 때 정수 입력받은 것이 문자열 입력으롷 한 번 들어가버렸기에 실제로는 N번 돌아간 것이 맞지만 N - 1만 작동한 것처럼 착각이 드는 상황이 발생한다. 심지어 정수 입력이 잘못 들어갔기에 내가 의도하였던 문자열 입력 받는 것에 조차 실패한다.
이를 해결하기 위해선
Scanner scanner = new Scanner(System.in);
N = scanner.nextInt();
scanner.nextLine();
arr = new int[N][N];
num = new int[N * N];
for (int i = 0; i < N; i++) {
String a = scanner.nextLine();
for (int k = 0; k < N; k++) {
arr[i][k] = a.charAt(k) - 48;
}
}
이런 식으로 한 번 nextLine()를 호출해준 뒤로 의도한 기능을 진행시켜주어야한다. C언어로 치면은 입력버퍼를 비워주어야하는 상황이랑 비슷한 것이라 생각하면 좋을 것 같다(원리는 완전히 다를 수 있다. 상황의 느낌이 비슷하다는 거다 느낌이... )
[SpringBoot] Invalid character found in method name. HTTP method names must be tokens가 발생하는 이유 (0) | 2023.07.21 |
---|---|
[JAVA] HashMap 과 ConcurrentHashMap (0) | 2023.02.27 |
[JAVA] 얕은 복사(Swallow Copy)와 깊은 복사(Deep Copy) (0) | 2023.02.21 |
[Spring] @Autowired와 어노테이션에 관해서 (0) | 2023.02.19 |
[Spring] XML에서 property의 name이 틀렸을 경우 생기는 일 (0) | 2023.02.18 |