컬렉션과 제네릭 개념에 대한 블로그를 작성하고 난 후에, 책의 마무리 과제에 있는 문제를 수행해 보았다. 아무래도 자바에 익숙하지 않고, 파이썬에서는 단순하게 클래스를 쓰면 될 것을 자바에선 컬렉션과 제네릭..으로 구성하다보니 조금 헷갈리긴 했다. 그럼에도 전에 누군가 자바로 알고리즘 풀면 재밌다고 한 적 있는데, 그럴 것 같기도 하다. 해당 언어가 익숙해지려면 알고리즘 푸는 것만큼 효과적인 것도 없으니까 자바로 알고리즘 푸는 연습도 해봐야겠다.
문제는 영어 단어 뜻 맞추기 게임을 만드는 것으로, 다음과 같이 수행되면 된다.
조건 : Word 클래스 작성하고, Word를 Vector<Word> 컬렉션에 삽입해 둔다. 벡터 내에서 정답이 아닌 단어를 3개 선택하여 총 4개의 보기를 보여준다.
단어 테스트를 시작합니다. -1을 입력하면 종료합니다.
현재 9개의 단어가 있습니다.
bear?
(1)곰 (2)인간 (3)동물 (4)눈 :>1
Excellent!
단어 테스트를 시작합니다. -1을 입력하면 종료합니다.
현재 9개의 단어가 있습니다.
picture?
(1)사진 (2)인간 (3)사랑 (4)사회 :>1
Excellent!
단어 테스트를 시작합니다. -1을 입력하면 종료합니다.
현재 9개의 단어가 있습니다.
love?
(1)곰 (2)그림 (3)사랑 (4)사회 :>2
No. !!
단어 테스트를 시작합니다. -1을 입력하면 종료합니다.
현재 9개의 단어가 있습니다.
human?
(1)그림 (2)사진 (3)인간 (4)안녕 :>-1
코드 :
import java.util.*;
class Word{
private String ko;
private String en;
Word (String ko, String en){
this.ko = ko;
this.en = en;
}
public String getKo() return ko;
public String getEn() return en;
}
public class practice_10 {
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
var dic = new Vector<Word>();
dic.add(new Word("그림", "painting"));
dic.add(new Word("곰", "bear"));
dic.add(new Word("눈", "eyes"));
dic.add(new Word("사진", "picture"));
dic.add(new Word("사회", "society"));
dic.add(new Word("인간", "human"));
dic.add(new Word("사랑", "love"));
dic.add(new Word("동물", "animal"));
dic.add(new Word("안녕", "hello"));
while(true){
System.out.println("단어 테스트를 시작합니다. -1을 입력하면 종료합니다.");
System.out.println("현재 "+ dic.size() +"개의 단어가 있습니다.");
Random rand = new Random();
Word quiz = dic.get(rand.nextInt(dic.size()));
System.out.println(quiz.getEn() +"?");
var tmp = new HashSet<Word>();
tmp.add(quiz);
while (tmp.size() < 4){ //중복을 제거하여 랜덤하게 3개의 단어를 뽑음.
tmp.add(dic.get(rand.nextInt(dic.size())));
}
Iterator<Word> iter = tmp.iterator();
int count = 1;
int correct = 0;
while (iter.hasNext()){ //집합 내의 보기들을 출력함.
var current = iter.next().getKo();
System.out.print(" ("+count+")" + current);
if (current.equals(quiz.getKo())) correct = count;
count++;
}
System.out.print(" :>");
int answer = scanner.nextInt();
if (answer == -1)
break;
else if (answer == correct){
System.out.println("Excellent!\n");
}
else{
System.out.println("No. !!\n");
}
}
}
}
중복을 제거하여 랜덤하게 3개의 단어를 뽑는 과정과 뽑힌 단어들을 출력하는 과정을 하나로 출력하면 더 깔끔한 코드가 될 것 같은데, 그렇게 되면 정답이 항상 같은 번호에 위치하게 해야 할 것 같아서 분리해뒀다.
'TIL > Java | Spring Boot' 카테고리의 다른 글
[Spring Boot] 서버에서 스프링 파일 실행시키기 (0) | 2022.01.03 |
---|---|
[Spring Boot] spring-boot-devtools 라이브러리 추가 (0) | 2022.01.03 |
2021.12.31 TIL : [Java] 컬렉션과 제네릭 (Collection & Generic) - 2 (0) | 2022.01.01 |
2021.12.30 TIL : [Java] 컬렉션과 제네릭 (Collection & Generic) - 1 (0) | 2021.12.30 |
2021.8.12 TIL : [Java] 기초 문법2 - 객체지향 프로그래밍 응용(2) (0) | 2021.08.12 |
댓글