Card.java
package kr.or.kihd.cardDeck;
public class Card {
//클래스별로 관리됨
//메모리 영역에 클래스 로딩됨과 동시에 올라감, 공용데이터로 활용
static final int KIND_MAX = 4; //카드 무늬의 개수
static final int NUM_MAX = 13; //무늬별 카드 수
//무늬를 상수로 지정
static final int SPADE = 4;
static final int DIAMOND = 3;
static final int HEART = 2;
static final int CLOVER = 1;
int kind;
int number;
//생성자
public Card(int kind, int number) {
super(); //Object의 기본생성자 호출
this.kind = kind;
this.number = number;
}
@Override
public String toString() {
//지역변수는 반드시 초기화
String kind = "";
String number = "";
//무늬설정
switch(this.kind) {
case 4:
kind = "스페이드";
break;
case 3:
kind = "다이아몬드";
break;
case 2:
kind = "하트";
break;
case 1:
kind = "클로버";
break;
}
switch(this.number) {
case 13:
number = "K";
break;
case 12:
number = "Q";
break;
case 11:
number = "J";
break;
default:
number = this.number + "";
}
return "무늬 : "+kind+", 숫자 : " +number;
}
}
Deck.java
package kr.or.kihd.cardDeck;
public class Deck {
final int CARD_NUM = 52; //카드의 개수(13 * 4)
//객체 배열(2차원 배열 타입)
Card[] card = new Card[CARD_NUM];
int i = 0;
//인스턴스 초기화 블럭
{
for(int k = Card.KIND_MAX; k>0; k--) {
for(int n = 1; n<Card.NUM_MAX+1; n++) {
card[i++] = new Card(k,n);
}
}
for(int j = 0; j<card.length; j++) {
System.out.printf("Card[%d]의 무늬 : %d, Card[%d]의 숫자 : %d\n",
j, card[j].kind, j, card[j].number );
}
}
public Deck() {
System.out.println("Deck 기본 생성자 호출");
}
//지정된 위치(index)에 있는 카드 하나를 선택
public Card pick(int index) {
if(0 <= index && index < CARD_NUM) {
return card[index];
}
else {
return pick();
}
}
Card pick() {
int index = (int)(Math.random()*CARD_NUM);
System.out.print("임의로 뽑은 카드 => ");
System.out.printf("%d번은 ", index);
return pick(index);
}
//단순히 섞는 메서드
public void shuffle() {
for(int n=0; n<1000; n++) {
//카드를 무작위로 섞는다
int i = (int)(Math.random()*CARD_NUM);
Card temp = card[0];
card[0] = card[i];
card[i] = temp;
}
System.out.println();
System.out.println("카드를 섞은 후 결과");
for(int j = 0; j<card.length; j++) {
System.out.printf("Card[%d]의 무늬 : %d, Card[%d]의 숫자 : %d\n",
j, card[j].kind, j, card[j].number );
}
}
}
DackTest.java
package kr.or.kihd.cardDeck;
public class DeckTest {
public static void main(String[] args) {
//Deck의 생성자를 호출하면 항상, 포함된 클래스(Card)부터 생성을 먼저함.
Deck deck = new Deck();
Card card = deck.pick(0);
System.out.println("카드 섞기 전에 제일 위에 있는 카드 => ");
System.out.println(card.toString());
card = deck.pick(51);
System.out.println("카드 섞기 전에 제일 아래에 있는 카드 => ");
System.out.println(card.toString());
deck.shuffle();
card = deck.pick(0);
System.out.println("카드 섞은 후에 제일 위에 있는 카드 => ");
System.out.println(card.toString());
card = deck.pick(51);
System.out.println("카드 섞은 후에 제일 아래에 있는 카드 => ");
System.out.println(card.toString());
card = deck.pick();
System.out.println(card.toString());
}
}