728x90
반응형
package chap13;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/*
* SutdaCard 클래스 구현하기
* 멤버 변수 : int num, boolean isKwang;
* 생성자 : 멤버값들을 입력받아 객체 생성.
* 매개변수가 없는 경우 num=1, isKwang=true인 객체 생성
* 멤버 메서드 : toString() 오버라이딩
* 1K,1,2 ,,,,
*/
class SutdaCard {
int num;
boolean isKwang;
SutdaCard() {
this(1,true);
}
SutdaCard(int num, boolean isKwang) {
this.num = num;
this.isKwang = isKwang;
}
@Override
public String toString() {
return num + ((isKwang)?"K":"");
}
}
/*
* SutdaDeck 클래스
* 멤버 변수 : List<SutdaCard> cards;
* static Map<String,Integer> jokbo;
* 생성자 : 매개변수 없음. //클래스와 이름이 같음
* SutdaCard 20장을 cards List 객체에 저장
* 1~10의 숫자를 가진 카드가 각각 2장씩.
* 숫자값이 1,3,8인 카드 중 한장은 isKwang이 true임.
* 메서드 : SutdaCard pick()
* 첫번째 카드를 제거하여 리턴.
* void shuffle()
* cards 섞어 주는 기능. Collections.shuffle 메서드 이용
*/
class SutdaDeck {
List<SutdaCard> cards;
static Map<String,Integer> jokbo; //클래스변수
//static 초기화 블럭 : 클래스정보 도르 될 때 한번 실행.
// 클래스변수의 초기화 담당 영역
static {
System.out.println("static 초기화블럭");
jokbo = new HashMap<>();
jokbo.put("KK", 4000);
for(int i=1; i<=10; i++) {
jokbo.put("" + i + i, 3000 + (i * 10));
}
jokbo.put("12", 2060); jokbo.put("21", 2060);
jokbo.put("14", 2050); jokbo.put("41", 2050);
jokbo.put("19", 2040); jokbo.put("91", 2040);
jokbo.put("110", 2030); jokbo.put("101", 2030);
jokbo.put("410", 2020); jokbo.put("104", 2020);
jokbo.put("64", 2010); jokbo.put("46", 2010);
}
SutdaDeck() { //생성자 : 인스턴스변수의 초기화
cards = new ArrayList<>();
for(int i=0; i<20; i++) {
cards.add(new SutdaCard(i%10+1,((i==0 || i==2 || i==7)?true:false)));
}
System.out.println(cards);
}
SutdaCard pick() {
//List 객체에서 0번인덱스의 객체를 제거, 반환
return cards.remove(0);
}
void shuffle() {
Collections.shuffle(cards);
System.out.println(cards);
}
}
/*
* Gamer 클래스
* 멤버 변수 : String name
* SutdaCard c1,c2
* 생성자 : 멤버변수값을 입력받아 객체 생성.
* 멤버변수 :
* int getScore() : c1,c2 카드의 점수 리턴
* c1,c2 카드가 jokbo에 있는 경우 jokbo 점수 리턴
* jokbo에 없는 경우 (c1.num + c2.num)%10 리턴
* String toString 오버라이딩
* 이름과 카드2장을 문자열로 리턴
*/
class Gamer {
String name;
SutdaCard c1,c2;
public Gamer(String name, SutdaCard c1, SutdaCard c2) {
this.name = name;
this.c1 = c1;
this.c2 = c2;
}
int getScore() {
Integer score = 0;
if(c1.isKwang && c2.isKwang) {
score = SutdaDeck.jokbo.get("KK");
}else {
score = SutdaDeck.jokbo.get("" + c1.num + c2.num);
if(score == null) {
score = (c1.num + c2.num) % 10;
}
}
return score;
}
public String toString() {
return name +"(" + c1 + "," + c2 + ")" + getScore();
}
}
public class SutdaEx1 {
public static void main(String[] args) {
System.out.println("main 메서드 시작");
SutdaDeck deck = new SutdaDeck();
deck.shuffle();
List<Gamer> list = new ArrayList<>();
list.add(new Gamer("임완준",deck.pick(),deck.pick()));
list.add(new Gamer("김호기",deck.pick(),deck.pick()));
list.add(new Gamer("장동해",deck.pick(),deck.pick()));
list.add(new Gamer("김상암",deck.pick(),deck.pick()));
list.add(new Gamer("정현수",deck.pick(),deck.pick()));
list.add(new Gamer("정승환",deck.pick(),deck.pick()));
list.add(new Gamer("조상우",deck.pick(),deck.pick()));
list.add(new Gamer("최효창",deck.pick(),deck.pick()));
list.add(new Gamer("홍석범",deck.pick(),deck.pick()));
list.add(new Gamer("조성규",deck.pick(),deck.pick()));
for(Gamer g : list)
System.out.println(g);
System.out.println("deck에 남은 카드의 갯수:" + deck.cards.size());
System.out.println(deck.cards);
//Gamer 중 가장 높은 점수를 가진 Gamer의 이름을 출력하기
//name 승리
//2명의 점수가 같은 경우 비김 출력
Collections.sort(list,(g1,g2)->g2.getScore() - g1.getScore());
if(list.get(0).getScore() == list.get(1).getScore())
System.out.println("비김.");
else
System.out.println(list.get(0).name + " 승리");
}
}
728x90
반응형
'study > Java' 카테고리의 다른 글
[Java] 35. Iterator, Enumeration (0) | 2022.03.31 |
---|---|
[Java] 34. StackQueue (0) | 2022.03.31 |
[Java] 32. Collection (Map) Exam4 (화면에서 나라이름을 입력받아 해당 나라의 수도를 출력하는 프로그램 구현하기) (0) | 2022.03.31 |
[Java] 32. Collection (Map1) (0) | 2022.03.31 |
[Java] 32. Test3 풀이 ( 1 ~ 99까지의 정수를 입력받아서 TreeSet에 저장하고, 0 을 입력하면 입력을 종료한다. ) (0) | 2022.03.30 |