반응형

 

문제

 

카드를 섞고 승패를 비교하라.

승패를 비교할 시 내 카드는 가장 첫장으로 하며, 비겼을 때의 경우와 카드 타입의 경우는 신경쓰지 않는다.

 

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;
	}
}

 

 

반응형