-> 블로그 이전

[명품 Java] 7장 Open Challenge (영어 단어 테스트 프로그램)

2021. 12. 14. 20:26Solution`/Java

package OpenChallenge;
import java.util.*;

class Word{
    private String eng, kor;
    Word(String eng, String kor){
        this.eng = eng;
        this.kor = kor;
    }
    String getEng(){
        return eng;
    }
    String getKor(){
        return kor;
    }
}

public class WordQuiz {
    Scanner sc = new Scanner(System.in);
    Vector<Word> v = new Vector<Word>();
    int[] r_quiz = new int[4];
    WordQuiz(){
        v.add(new Word("love", "사랑"));
        v.add(new Word("animal", "동물"));
        v.add(new Word("picture", "그림"));
        v.add(new Word("emotion", "감정"));
        v.add(new Word("baby", "아기"));
        v.add(new Word("error", "오류"));
        v.add(new Word("society", "사회"));
        v.add(new Word("doll", "인형"));
        v.add(new Word("bear", "곰"));
        v.add(new Word("example", "보기"));
        v.add(new Word("deal", "거래"));
        v.add(new Word("photo", "사진"));
        v.add(new Word("human", "인간"));
        v.add(new Word("statue", "조각상"));
        v.add(new Word("eye", "눈"));
        v.add(new Word("hand", "손"));
        v.add(new Word("ant", "개미"));
        v.add(new Word("resume", "이력서"));
        v.add(new Word("concern", "걱정"));
        v.add(new Word("bad", "나쁜"));
        v.add(new Word("developer", "개발자"));
        v.add(new Word("word", "단어"));
    }

    void run(){
        System.out.println("\"명품단어\"의 단어 테스트를 시작합니다. -1을 입력하면 종료합니다.");
        System.out.println("현재 " + v.size() + "개의 단어가 들어 있습니다.\n");
        quiz();
    }

    void quiz(){
        while(true){
            make();
            int answerNum = (int)(Math.random()*4); // 0 1 2 3중 정답번호 생성
            int answerIndex = r_quiz[answerNum]; // v.size() 중 랜덤 정수 4개 저장된 r_quiz에서 정답번호 index 설정
            // ex) r_quiz[10, 5, 2, 9], answerNum = 1 -> answerIndex = 5
            System.out.println(v.get(answerIndex).getEng() + "?"); // ex) v.get(5).getEng()

            for(int i=0; i<r_quiz.length; i++){
                System.out.print("(" + (i+1) + ")");
                System.out.print(v.get(r_quiz[i]).getKor() + " ");
                // 1. v.get(10) 2. v.get(5) 3. v.get(2) 4. v.get(9)
            }
            System.out.print(" >> ");
            int userSelect = sc.nextInt();
            if(userSelect == -1){
                System.out.println("\"명품영어\"를 종료합니다...");
                break;
            }
            else if((userSelect-1) == answerNum){
                System.out.println("Excellent!!\n");
            }
            else{
                System.out.println("No....\n");
            }
        }
    }

    void make(){
        for(int i=0; i<4; i++){
            r_quiz[i] = (int)(Math.random()*v.size()); // r_quiz에 랜덤 숫자 4개 저장
            for(int j=0; j<i; j++){
                if(r_quiz[j] == r_quiz[i]){
                    i--;
                    continue;
                }
            }
        }
    }

    public static void main(String[] args) {
        WordQuiz wq = new WordQuiz();
        wq.run();
    }
}
------------------------------------------------
"명품단어"의 단어 테스트를 시작합니다. -1을 입력하면 종료합니다.
현재 22개의 단어가 들어 있습니다.

love?
(1)오류 (2)걱정 (3)사랑 (4)눈  >> 3
Excellent!!

ant?
(1)나쁜 (2)사랑 (3)개미 (4)걱정  >> 3
Excellent!!

developer?
(1)사랑 (2)조각상 (3)인형 (4)개발자  >> 4
Excellent!!

love?
(1)사랑 (2)인간 (3)인형 (4)이력서  >> 1
Excellent!!

picture?
(1)개미 (2)그림 (3)동물 (4)곰  >> 3
No....

picture?
(1)사랑 (2)인형 (3)걱정 (4)그림  >> 4
Excellent!!

bad?
(1)단어 (2)나쁜 (3)아기 (4)손  >> -1
"명품영어"를 종료합니다...