• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

백준11659 구간합 런타임 에러

24.03.08 22:32 작성 24.03.08 22:41 수정 조회수 103

0

하루코딩님 안녕하세요, 열심히 강의 들으면서 공부중입니다 항상 감사드려요

public class tes {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int[] arr = new int[N + 1];
        StringBuilder sb = new StringBuilder();
        
        st = new StringTokenizer(br.readLine());
        for(int i = 1; i <= N; i++) {
            //누적 합 저장
            arr[i] = arr[i - 1] + Integer.parseInt(st.nextToken());
        }

        for(int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            int start = Integer.parseInt(st.nextToken());
            int end = Integer.parseInt(st.nextToken());
            sb.append(arr[end] - arr[start - 1]).append("\n");
        }
        System.out.println(sb);
    }
}

위와 같이 구현을 하고 실제로 콘솔에서 제가 아래와 같이 입력하면 tokenizer에서 exception이 발생합니다

5 3
5 4 3 2 1
Exception in thread "main" java.util.NoSuchElementException
	at java.base/java.util.StringTokenizer.nextToken(StringTokenizer.java:347)
	at tes.main(tes.java:19)

디버깅을 해보면 첫번째 5 3 입력값은 잘 읽어서 tokenizer에 저장이 되었는데요,

두번째 인풋인 "5 4 3 2 1"은 입력후 엔터를 치면 st = new StringTokenizer(br.readLine()); 라인을 넘어가면 실제 br(BufferedReader)에는 "[\n, 5, 4, 3, 2, 1, \n, , , , ,.. " 처럼 들어가 있는데 st(stringTokenizer)의 str 값을 보면 "" 이렇게 비어있어요 그래서 nextToken()이 없어 에러가 나는것같은데요

 

왜 제 itellij에서만 그럴까요 ? ㅠㅠㅠ jdk17 사용하고있습니다

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.09

안녕하세요, 인프런 AI 인턴입니다.

2v2님, 질문 주셔서 감사합니다.
코드를 잘 보니 주신 예제에서 런타임 예외가 발생하는 부분은 StringTokenizer가 새로운 라인을 읽을 때 발생하는 것 같습니다. 입력이 정상적으로 BufferedReader를 통해 읽히지 않아 StringTokenizer에서 예외가 발생한 것으로 보입니다.

통상적으로 IDE 환경이나 콘솔 환경 때문에 이러한 문제가 발생하는 경우가 드뭅니다. 하지만 여러 이유로 콘솔 입력이 정상적으로 처리되지 않을 수 있습니다. 예를 들어, IDE 내의 콘솔이 자동 개행 문자를 처리하는 방식이나 입력 버퍼링에 차이가 있을 수 있습니다. 또한, 시스템의 Locale 설정이 달라서 입력 형식에 영향을 줄 수도 있습니다.

해결 방안으로는 다음과 같은 방법들을 시도해 볼 수 있습니다:

  1. IDE 콘솔 설정을 확인하여 입력과 관련된 설정을 점검해 보시기 바랍니다.
  2. BufferedReader와 StringTokenizer 대신 Scanner를 사용하여 입력을 처리해보세요.
  3. 실제 백준 온라인 저지 환경에서 해당 코드를 제출하여 문제가 발생하는지 확인해보세요.
  4. 만약 Scanner 사용 시 문제가 없다면, IDE의 문제일 가능성이 있으므로 IDE를 업데이트하거나 재설치를 고려해볼 수 있습니다.

또한, jdk17을 사용하고 계시는데, 다른 버전의 JDK에서도 동일한 문제가 발생하는지 확인해보세요. 서로 다른 JDK 버전에서의 호환성 문제일 수도 있습니다.

위의 방법을 시도해도 문제가 해결되지 않는다면, IDE 사용에 있어서 특이한 설정이 되어 있거나 다른 문제가 있을 수 있으므로, IDE 공식 문서나 커뮤니티에 문의를 해보시는 것도 좋은 방법입니다.

도움이 되셨길 바랍니다. 공부하시는 데에 더욱 힘이 되는 인턴이 되겠습니다!