java.util.NoSuchElementException 오류 해결 방법

조회수 4571회

객체를 생성해서 거기에 값을 입력하는 소스를 짰는데 java.util.NoSuchElementException 오류가 뜹니다. 어떻게 해결하면 좋을까요?

import java.util.Scanner;

class Obj {
    private String name;
    private int age;
    private String idNumber;

    public static int numOfObjs = 0;

    public void setObj(String name, int age, String idNumber) {
        this.name = name;
        this.age = age;
        this.idNumber = idNumber;
        numOfObjs++;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getIdNumber() {
        return idNumber;
    }
}

public class StringTest {
    public static void menu(Obj[] objs) {
        Scanner scanner = new Scanner(System.in);

        while(true) {
            System.out.print("2. register object\n" + 
                     "5. end\n" +
                     "input: ");
            int num = scanner.nextInt();
            switch(num) {
                case 2:
                    registerObj(objs);
                    continue;
                case 5:
                    break;
                default:
                    System.out.println("Error");
                    continue;
            }
            break;
        }
        scanner.close();
    }
    public static void registerObj(Obj[] objs) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Name: ");
        String name = scanner.next();

        System.out.print("Age: ");
        int age = scanner.nextInt();

        System.out.print("ID Number: ");
        String idNumber = scanner.next();

        int id = Obj.numOfObjs;

        objs[id] = new Obj();

        objs[id].setObj(name, age, idNumber);

        System.out.println(objs[id].getName());
        System.out.println(objs[id].getAge());
        System.out.println(objs[id].getIdNumber());

        scanner.close();
    }

    public static void main(String[] args) {
        Obj[] objs = new Obj[10000];
        menu(objs);
    }
}

메뉴를 통하지 않고 메인에서 바로 registerObj 메소드를 호출하면 에러가 뜨지 않습니다. 이것도 이유는 모르겠습니다만..

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 디버거를 사용하세요. 많이 사용하는 이클립스, idea, vscode 를 사용하여 라인단위 디버깅이 가능합니다. 한줄한줄 실행해보면서 변수값을 확인해보면 원인을 찾을 수 있습니다. 개발시에 가장 많이 하는 작업이 디버깅인데 개발자가 디버깅을 제대로 못한다면 개발업무를 제대로 할 수가 없습니다. 이번기회에 디버거 사용방법을 익히세요. 정영훈 2019.5.10 02:33

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)