Repository
명품자바 7장 오픈챌린지 (단어 Quiz 게임)
dev_zephyr
2021. 1. 27. 18:51
컬렉션을 사용하기 시작했다.
(근데 왜 Arraylist가 아닌 Vector를 썼지..?)
import java.util.Random;
import java.util.Scanner;
import java.util.Vector;
class Word {
private String eng;
private String kor;
public Word(String eng, String kor) {
this.eng = eng;
this.kor = kor;
}
public String getEng() {
return eng;
}
public String getKor() {
return kor;
}
}
public class OpenChallenge01 {
Scanner scan = new Scanner(System.in);
Vector<Word> v = new Vector<>();
Random rand = new Random();
final int MAX_CHOICE = 4;
int[] question = new int[MAX_CHOICE];
public OpenChallenge01() {
setVector(); // 벡터에 영+한 단어 객체를 생성한다.
System.out.println("Java 단어 테스트를 시작합니다. -1을 입력하면 종료합니다.");
System.out.println("현재 " + v.size() + "개의 단어가 들어 있습니다.");
System.out.println("__________________________________________________");
game();
}
public void game() {
while(true) {
setChoice(); // 랜덤 숫자 4개(보기의 숫자만큼) 생성해서 배열에 담기
int answerNum = rand.nextInt(4); //0~3중 정답번호 생성
int answerIndex = question[answerNum]; // 정답번호를 가지고있는 배열 안에 들어있는 숫자가 정답이다.
System.out.println(v.get(answerIndex).getEng() + "?"); // 정답 인덱스의 영어단어를 물어보고
for(int i=0; i<question.length; i++) { //벡터의 인덱스로는 question 배열에 담긴 값들을 하나씩 넣으면서
System.out.print("(" + (i+1) + ")"); //해당 인덱스의 kor를 출력한다.
System.out.print(v.get(question[i]).getKor() + " ");
}
System.out.print(">> ");
int choice = scan.nextInt();
if(choice == -1) {
System.out.println("종료합니다.");
break;
}
else if(choice-1 == answerNum) { //초이스는 1~4이지만 인덱스는 0~3이기때문에 초이스-1해준다.
System.out.println("Excellent !!");
System.out.println("__________________________________________________");
} else {
System.out.println("No. !!");
System.out.println("__________________________________________________");
}
}
}
public void setChoice() {
for(int i=0; i<MAX_CHOICE; i++) { // 보기 4개를 랜덤하게 만들기위해 question배열에 0~3 랜덤값 4개를 넣는다.
question[i] = rand.nextInt(v.size()); // 같은 보기가 나오면 안되기때문에 중복되지 않게 넣는다.
for(int j=0; j<i; j++) {
if(question[i] == question[j]) {
i--;
continue;
}
}
}
}
public void setVector() {
v.add(new Word("constructor", "생성자"));
v.add(new Word("overriding", "재정의"));
v.add(new Word("extends", "상속"));
v.add(new Word("array", "배열"));
v.add(new Word("string", "문자열"));
v.add(new Word("character", "문자"));
v.add(new Word("integer", "정수"));
v.add(new Word("double", "실수"));
v.add(new Word("abstract", "추상"));
v.add(new Word("implements", "구현하다"));
}
public static void main(String[] args) {
new OpenChallenge01();
}
}