본문 바로가기

Java/본격 Java 퀴즈 기초

[Java] Enumeration 실습

포커카드를 enum 형식으로 저장해서 출력해보는 프로그램을 만들어보자

.

.

enum 형식으로 카드 종류랑 숫자를 입력한다.

그리고 enum 이름 으로 객체를 만들어서 프로그램을 작성한다.

.

.

package enumCard;

public class Card {
	enum Kind {SPADE, DIAMOND, HEART, CLOVER}
	enum Number {ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING}
	Kind kind;
	Number num;
	static final int KIND_MAX = 4;
	static final int NUM_MAX = 13;
	
	public Card() {
		this(Kind.SPADE, Number.ACE);
	}
	
	public Card(Kind kind, Number num) {
		this.kind = kind;
		this.num = num;
	}
	
	public Kind getKind() { return kind; }
	public void setKind(Kind kind) { this.kind = kind; }
	public Number getNumber() { return num; }
	public void setNumber(Number number) { this.num = number; }

	@Override
	public String toString() {
		return "Card [kind=" + kind.name() + ", number=" + num.name() + "]";
	}
	

}

.

Deck이라는 카드판 클래스를 만든다.

여기서는 카드를 뽑고 섞는 메소드를 구현한다

.

package enumCard;
import java.util.*;

public class Deck {
	static final int TOTAL_CARDS = Card.Kind.values().length * Card.Number.values().length;
	private Card[] deck;
	Random random = new Random();
	
	public Deck() { 
		deck = new Card[TOTAL_CARDS];
		int index = 0;
		for(Card.Kind kind : Card.Kind.values()) {
			for(Card.Number num : Card.Number.values()) {
				deck[index++] = new Card(kind, num);
			}
		}
	}
	
	// 지정된 위치의 카드를 변환한다.
	public Card getCard(int index) { return deck[index];}
	public Card getCard() { return deck[random.nextInt(52)];}
	
	// Deck의 전체 카드를 섞는다.
	public void shuffle() {
		Card temp = null;
		int index = 0;
		
		for(int i = 0; i < TOTAL_CARDS; i++) {
			index = random.nextInt(52);
			temp = deck[0];
			deck[0] = deck[index];
			deck[index] = temp;
		}
		System.out.println("카드 섞기를 완료하였습니다.");
	}
}

.

그리고 실행할 프로그램을 작성한다

.

package enumCard;

public class TestCard {

	public static void main(String[] args) {
		Deck deck = new Deck();
		
		deck.shuffle(); // 카드를 섞는다.
		for(int i = 0; i < 5; i++) {
			Card c = deck.getCard(i);
			System.out.println(c);
		}
	}
	
	

}

.

.

728x90
반응형