작성
·
111
0
public class Number4 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int count = scanner.nextInt();
List<String> array = new ArrayList<>();
for (int i = 0; i <= count; i++) {
array.add(scanner.nextLine());
}
for (String str : array) {
Deque<Character> stack = new ArrayDeque<>();
for ( char c : str.toCharArray()){
stack.push(c);
}
while (!stack.isEmpty()){
System.out.print(stack.pop());
}
System.out.println();
}
}
}
위 풀이방법처럼 풀었는데 이게 컴파일 에러가 나는데 혹시 이 풀이방법이 문제점을 가지고 있을까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
담당님의 코드를 확인해보니, 컴파일 에러가 나는 이유는 Scanner
사용 시, 첫 번째 nextInt()
호출 후 바로 nextLine()
을 호출하는 경우 발생할 수 있는 문제로 보입니다. nextInt()
메소드는 정수만 읽고, 줄바꿈 문자는 그대로 입력 스트림에 남겨둡니다. 그래서 다음 nextLine()
호출 때, 실제로 사용자가 의도한 데이터를 입력하기 전에 남아있던 줄바꿈 문자를 만나고 입력이 종료되는 것처럼 동작하기 때문입니다.
해당 문제를 해결하기 위해서는 nextInt()
호출 직후 nextLine()
을 한 번 더 호출하여 입력 스트림에서 남아있는 줄바꿈 문자를 명시적으로 소비하는 것이 좋습니다. 이렇게 수정하면 정상적으로 문자열을 입력받을 수 있습니다.
다음은 수정된 코드의 예시입니다:
public class Number4 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int count = scanner.nextInt();
scanner.nextLine(); // 이 부분을 추가하여 남아있는 줄바꿈 문자를 소비합니다.
List<String> array = new ArrayList<>();
for (int i = 0; i < count; i++) { // i <= count에서 i < count로 변경해야 하는 것을 추천드립니다.
array.add(scanner.nextLine());
}
for (String str : array) {
Deque<Character> stack = new ArrayDeque<>();
for (char c : str.toCharArray()) {
stack.push(c);
}
while (!stack.isEmpty()) {
System.out.print(stack.pop());
}
System.out.println();
}
}
}
또한, 배열을 추가하는 반복문에서 사용한 조건 i <= count
대신 i < count
를 사용해야 지정한 개수만큼 정확히 입력을 받을 수 있습니다. 첫 번째 nextInt()
로 입력받은 count
는 배열에 저장할 문자열의 수를 의미하므로, 반복문의 조건을 i < count
로 설정하여 정확히 count
횟수만큼 입력을 받아야 합니다.