[Java] NoSuchElement 오류

JinUk Lee·2023년 12월 11일

Java

목록 보기
1/1

자바 공부를 시작하고 처음으로 알고리즘 문제를 풀었는데 이러한 오류를 마주쳤다.

예외 설명을 보면 입력받은 값보다 더 많은 값을 찾을때 발생하는 예외다.

예를 들어서 숫자 1개를 입력받았는데 a,b 각각에 입력받은 값을 부여하려고 할때 이러한 오류가 발생한다.

그러나 나의 코드에는 이러한 에러가 없었기에 헤맸는데 결과적으로는 Scanner의 갯수 문제였다.

자바에서는 Scanner이 프로그램마다 1개밖에 존재할 수 없다.

Scanner 객체를 생성하면서 입력을 받는다고 생각했는데, next 메소드에서 입력을 받는 것이였다.


import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int n;
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        int[] a = new int[n];
        Scanner sc2 = new Scanner(System.in);

        for (int i=0; i<n; i++) {
            a[i]=sc2.nextInt();
            System.out.println(a[i]);
        }
        int[] b = new int[n];
        for (int i=0; i<n; i++) {
            b[i]=1;
            System.out.println(b[i]);
        }

        for (int i=1; i<n; i++) {
            for (int j=0; j<i; j++) {
                if (a[i]<a[j]) {
                    b[i] = Math.max(b[j]+1,b[i]);
                }

            }
        }
        int maxAns = Arrays.stream(b).max().getAsInt();
        System.out.println(maxAns);
    }
}

원래는 이러한 코드였는데

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int n;
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        int[] a = new int[n];

        for (int i=0; i<n; i++) {
            a[i]=sc.nextInt();

        }

        int[] b = new int[n];

        for (int i=0; i<n; i++) {
            b[i]=1;

        }

        for (int i=1; i<n; i++) {
            for (int j=0; j<i; j++) {
                if (a[i]<a[j]) {
                    b[i] = Math.max(b[j]+1,b[i]);
                }

            }
        }
        int maxAns = Arrays.stream(b).max().getAsInt();
        System.out.println(maxAns);
    }
}

이렇게 수정하고 통과할 수 있었다.

profile
개발자 지망생

0개의 댓글