[명품 Java Programming] 7장 Open Challenge

2021. 12. 7. 07:08Java/명품 Java

** 해당 문제가 수록된 장까지의 교재 내용만을 이용하여 소스코드를 작성하였습니다**

 

영어 단어 뜻 맞추기 게임을 만들어 보자. 영어 단어, 한글 단어로 구성되는 Word 클래스를 작성하고 프로그램 내에서 미리 여러 개의 Word 객체를 Vector<Word> 컬렉션에 삽입해둔다. 그리고 랜덤하게 사용자에게 문제를 던진다. 벡터 내에 정답이 아닌 단어를 랜덤으로 3개 선택하고 정답과 함께 4개의 보기를 출력한다. 

 

소스코드

import java.util.*;       //Scanner클래스만 import 해도 됨.

class Word{
	String eng, kor;
	
	public Word(String eng, String kor) {
		this.eng = eng; this.kor = kor;
	}
}

public class WordTest {
	Scanner scanner = new Scanner(System.in);
	Vector<Word> v = new Vector<Word>();
	
	public WordTest() {
		v.add(new Word("love", "사랑"));
		v.add(new Word("animal", "동물"));
		v.add(new Word("painting", "그림"));
		v.add(new Word("emotion", "감정"));
		v.add(new Word("baby", "아기"));
		v.add(new Word("error", "오류"));
		v.add(new Word("society", "사회"));
		v.add(new Word("bear", "곰"));
		v.add(new Word("example", "보기"));
		v.add(new Word("eye", "눈"));
		v.add(new Word("transaction", "거래"));
		v.add(new Word("picture", "사진"));
		v.add(new Word("human", "인간"));
		v.add(new Word("statue", "조각상"));
	}
	
	public void Example(Integer answerIndex, Integer answerNum, String answer) {
		int[] example = new int[4];
		int[] exampleIndex = new int[4];
		
		for(int i = 0; i <4; i++) {
			exampleIndex[i] = (int)(Math.random()*v.size());
			example[i] = exampleIndex[i];
			
			for(int j = 0; j <i; j++) {
				if((exampleIndex[i] == exampleIndex[j])|(exampleIndex[i] == answerIndex)) {
					i--;
					continue;
				}
			}
		}
		
		example[answerNum] = answerIndex;
		
		for(int i = 0; i <4; i++) {
			System.out.print("(" + (i+1) +")");
			System.out.print(v.get(example[i]).kor + " ");
		}
		
		System.out.print(":>");
		
	}
	
	public void QuizStart() {
		while(true) {
			int answerNum = (int)(Math.random() * 4 +1);
			int answerIndex = (int)(Math.random()*v.size());
			String answer = v.get(answerIndex).eng;
			System.out.println(answer + "?");
			
			Example(answerIndex, answerNum, answer);
			
			int choice = scanner.nextInt();
			
			if(choice == -1) {
				System.out.println('"' + "명품영어" + '"' + "를 종료합니다...");
				break;
			}else if(choice == answerNum+1) 
				System.out.println("Excellent !!");
			else 
				System.out.println("No. !!");
		}
	}
	
	public void Quiz() {
		System.out.println('"' + "명품영어" + '"' +"의 단어 테스트를 시작합니다. -1을 입력하면 종료합니다.");
		System.out.println("현재 " + v.size() + "개의 단어가 들어 있습니다." );
		
		QuizStart();
		
	}
	
	public static void main(String[] args) {
		WordTest wt = new WordTest();
		wt.Quiz();
	}
    
}

 

 

결과