9
2015-06-02 10:43:28
0
왜 Decktest라는 클래스 안에 이너클래스형태로 Card와 Deck을 넣은건지 궁금하군요 특별한 이유라도 있나요?
Card클래스와 Deck클래스를 밖으로 빼내셔야합니다. 지금 Deck deck = new Deck(); 이것도 좀 말이 안되는것 같습니다.
만약 메인 메서드 안에서 만든다면
Decktest decktest = new Decktest();
Deck deck = decktest.new Deck();
이런식으로 만들어져야합니다.
class Card {
static final int KIND_MAX = 4; // 카드 무늬의 수
final static 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;
Card() {
this(SPADE, 1);
}
Card(int kind, int number) {
this.kind = kind;
this.number = number;
}
public String toString() {
String kind = "";
String number = "";
switch (this.kind) {
case 4:
kind = "SPADE";
break;
case 3:
kind = "DIAMOND";
break;
case 2:
kind = "HEART";
break;
case 1:
kind = "CLOVER";
break;
default:
}
switch (this.number) {
case 13:
number = "K";
case 12:
number = "Q";
case 11:
number = "J";
default:
number = this.number + "";
}
return "kind:" + kind + ",number:" + number;
}
}
class Deck {
final int CARD_NUM = 52; // 카드의 개수
Card c[] = new Card[CARD_NUM];
Deck() { // Deck의 카드를 초기화시킨다.
int i = 0;
for (int k = Card.KIND_MAX; k > 0; k--) {
for (int n = 1; n < Card.NUM_MAX + 1; n++) {
c[i++] = new Card(k, n);
}
}
}
Card pick(int index) { // 지정된 위치(index)에 있는 카드 하나 선택
if (0 <= index && index < CARD_NUM)
return c[index];
else
return pick();
}
Card pick() { // Deck에서 카드 하나를 선택한다.
int index = (int) (Math.random() * CARD_NUM);
return pick(index);
}
void shuffle() { // 카드의 순서를 섞는다.
for (int n = 0; n < 1000; n++) {
int i = (int) (Math.random() * CARD_NUM);
Card temp = c[0];
c[0] = c[i];
c[i] = temp;
}
}
}
public class DeckTest {
public static void main(String[] args) {
Deck d = new Deck(); // 카드 한벌(Deck)를 만든다
Card c = d.pick(0); // 섞기 전에 제일 위에 카드를 뽑는다.
System.out.println(c); // System.out.println(c.toString());와같다
d.shuffle();
c = d.pick(0);
System.out.println(c);
}
}