Java 언어로 간단한 사전 프로그램을 만들고 있는데 문제가 발생하여 질문드립니다.

조회수 2709회
public class MainWindow {
    public static void main(String[] args) {
        int selectMenu = 0;
        String inputWord = null;
        String[] wordArray = new String[20];

        WordPlusMinus wordPlusMinus = new WordPlusMinus();
        WordSearch wordSearch = new WordSearch();
        Scanner scanner = new Scanner(System.in);

        /*
         * 입력될 단어 : 가시버시, 고스러지다, 고운매, 고주리미주리, 곧추, 곧추다, 곧추뜨다, 골무, 곰방대, 곰삭다, 곰살궃다, 곱새기다, 괴괴하다, 군입정, 기스락, 길라잡이, 길섶, 꺽쇠, 나풀나풀, 냇
         */

        while(true) {
            System.out.println("==============================================");
            System.out.println("사전 프로그램.\t\n");
            System.out.println("0.단어 입력.\n1.단어 조회.\n2.단어 뜻 찾기.\n3.단어 추가 및 지우기.\n4.프로그램 종료.");
            System.out.print("원하는 메뉴 번호를 입력하세요 : ");

            selectMenu = scanner.nextInt();
            switch(selectMenu) {
                case 0:
                    for(int i = 0; i < wordArray.length; i++) {
                        System.out.print("단어를 입력하세요 : ");
                        inputWord = scanner.nextLine();
                        wordArray[i] = inputWord;
                    }
                    break;
                case 1:
                    for(int i = 0; i < wordArray.length; i++) {
                        System.out.println(i + "번 째 단어 : " + wordArray[i]);
                    }
                    break;
                case 2:
    //              wordSearch.main(null);
                    break;
                case 3:
    //              wordPlusMinus.main(null);
                    break;
                case 4:
                    scanner.close();
                    System.exit(0);
                    break;
            }
        }
    }
}

이런 형태로 간단한 사전을 만들고 있습니다. 근데 단어 입력과정에서 다음과 같이 입력 상에 문제가 생기고 단어 입력 후 조회를 할 경우 0 번째 배열 인덱스 안에 값이 null 로 되는데 이유를 모르겟습니다.

이미지

또한 while() 문 밖에 scanner.close() 와 System.exit(0) 을 쓰게 되면 Unreachable 이라고 뜨는데 같은 main 메소드 안에 있으면 상관 없는 것 아닌가요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • nextInt의 경우 nextLine과는 다르게 입력된 값을 읽을 때 개행 문자를 포함하지 않습니다. 그래서 0을 입력하고 엔터를 쳤을 경우 개행문자가 입력이 되어서 빈값으로 보이는 것 입니다.

    가장 간단한 방법은 아래와 같이 scanner.nextLine() 를 추가해서 개행문자를 읽어 들이는 것입니다.

    selectMenu = scanner.nextInt();
    scanner.nextLine(); //추가됨
                switch(selectMenu)
    

    다른 방법으로는 아래와 같이 파싱하는 것이 있겠네요.

    selectMenu = Integer.parseInt(scanner.nextLine());
    
    
    • 감사합니다! 미쳐 파싱하는 방법을 생각을 하지 못했었습니다. 근데 마지막에 while() 문 밖에 scanner.close(); 와 System.exit(0); 같은 경우 Unreachable 가 왜 뜨는지 모르겠습니다. 같은 main 메소드 안에 있으면서 while 문에서 스캐너 객체를 생성하지 않아 상관없을 듯 한데 에러가 발생하더라구요.. 알 수 없는 사용자 2016.11.10 09:35
    • while문의 조건이 true 이므로 무한루프입니다. while문 밖으로 빠져나올 경우가 없기때문에 해당 코드에 도달할 수 없다고 하는 것 같네요. while문의 조건을 selectMenu != 4 로 한다면 에러메세지가 사라질 것 같네요 김선우 2016.11.10 10:12
    • 아.. 이런 미묘한 차이를 간파하지 못한 것 같네요.. 정말 좋은 답변 감사합니다. 알 수 없는 사용자 2016.11.11 15:46

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

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

(ಠ_ಠ)
(ಠ‿ಠ)