반응형
문제
카드를 섞고 승패를 비교하라.
승패를 비교할 시 내 카드는 가장 첫장으로 하며, 비겼을 때의 경우와 카드 타입의 경우는 신경쓰지 않는다.
package kr.or.ddit.homework.home12;
public enum Type {
DIA, CLOVER, HEART, SPADE
}
package kr.or.ddit.homework.home12;
public class Card {
int num;
String type;
public Card(int num, String type) {
this.num = num;
this.type = type;
}
@Override
public String toString() {
return "Card [num=" + num + ", type=" + type + "]";
}
}
package kr.or.ddit.homework.home12;
public class Deck {
public static void main(String[] args) {
Deck deck = new Deck();
Card[] cList = deck.cardList();
for (Card card : cList) {
print(card);
}
}
public static void print(Card card) {
String type = "";
if(card.type == Type.DIA.name()) type ="◆";
if(card.type == Type.CLOVER.name()) type ="♣";
if(card.type == Type.HEART.name()) type ="♥";
if(card.type == Type.SPADE.name()) type ="♠";
String num = card.num+"";
if(card.num == 1) num ="A";
if(card.num == 11) num ="J";
if(card.num == 12) num ="Q";
if(card.num == 13) num ="K";
System.out.println(type+num);
}
/*
* 내카드랑 다음카드랑 비교해서 승패 비교하기.
*/
/*
* 카드 섞기
*/
public Card[] cardList() {
Card[] cardList = new Card[52];
int cur =0;
for (Type t : Type.values()) {
for(int i=1; i<=13; i++) {
Card card = new Card(i, t.name());
cardList[cur++] = card;
}
}
return cardList;
}
}
정답
package kr.or.ddit.homework.HomeWork12;
public enum Type {
DIA, CLOVER, HEART, SPADE
}
package kr.or.ddit.homework.HomeWork12;
public class Card {
int num;
String type;
public Card(int num, String type) {
this.num = num;
this.type = type;
}
@Override
public String toString() {
return "Card [num=" + num + ", type=" + type + "]\n";
}
}
package kr.or.ddit.homework.HomeWork12;
import java.util.Arrays;
import java.util.Random;
public class Deck {
public static void main(String[] args) {
Deck deck = new Deck();
Card[] cList = deck.cardList();
for (Card card : cList) {
print(card);
}
// 카드 섞기
cList = deck.shuffle(cList);
// 승패 비교
Card myCard = cList[0];
boolean win = deck.winChk(cList, myCard);
System.out.print("내 카드 : ");
print(myCard);
System.out.print("상대 카드 : ");
print(cList[1]);
if(win == true) {
System.out.println("승리하였습니다.");
}else { // 지거나 무승부
System.out.println("졌습니다.");
}
}
public static void print(Card card) {
String type = "";
if(card.type == Type.DIA.name()) type ="◆";
if(card.type == Type.CLOVER.name()) type ="♣";
if(card.type == Type.HEART.name()) type ="♥";
if(card.type == Type.SPADE.name()) type ="♠";
String num = card.num+"";
if(card.num == 1) num ="A";
if(card.num == 11) num ="J";
if(card.num == 12) num ="Q";
if(card.num == 13) num ="K";
System.out.println(type+num);
}
/*
* 내카드랑 다음카드랑 비교해서 승패 비교하기.
*/
public boolean winChk(Card[] cardList, Card my) {
// 랜덤으로 뽑은 카드랑 비교.
// System.out.println(my); // 내가 뽑은 카드의 번호와 타입 확인
// System.out.println(cardList[1]); // 다음 카드의 번호와 타입 확인
// 스페이드 > 다이아 > 하트 > 클로버
if(my.num > cardList[1].num) {
return true;
} else {
return false;
}
}
/*
* 카드 섞기
*/
public Card[] shuffle(Card[] cardList) {
int length = cardList.length; // 52개의 카드
Card[] tempCard = new Card[length];
for(int i=0; i<length; i++) {
int ran = new Random().nextInt(length)+1;
tempCard[i] = cardList[ran-1];
for(int j=0; j<i; j++) {
if(tempCard[i] == tempCard[j]) {
i--;
break;
}
}
}
// System.out.println(Arrays.toString(tempCard));
return tempCard;
}
public Card[] cardList() {
Card[] cardList = new Card[52];
int cur =0;
for (Type t : Type.values()) {
for(int i=1; i<=13; i++) {
Card card = new Card(i, t.name());
cardList[cur++] = card;
}
}
return cardList;
}
}
반응형
'자바' 카테고리의 다른 글
[Java 초급] 16.5장 테스트 (0) | 2023.12.22 |
---|---|
[Java 초급] 16장 Getter, Setter, 재귀함수 (0) | 2023.12.22 |
[Java 초급] 15장 enum 타입, static, 싱글톤 (0) | 2023.12.20 |
[Java 초급] 13.5.2장 테스트2 (0) | 2023.12.19 |
[Java 초급] 14장 String 메소드 종류 (2) | 2023.12.19 |