728x90
public class Ex02 {
public static void main(String[] args){
Deck deck = new Deck();
Card card = deck.pick(0);
System.out.println(card);
deck.shuffle();
card = deck.pick(0);
System.out.println(card);
}
}
class Card{
static final int KIND_MAX = 4; //final을 변수에 쓰게되면 상수화.
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;
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 SPADE: kind = "SPADE"; break; // 킬(명예,권력) //SPADE를 final을 사용하여 상수화가 되었기 때문에.
//상수만 넣을수 있던 SPAED 칸에 SPADE를 넣을 수 있었다.
case DIAMOND: kind = "DIAMOND"; break; // 재화, 부귀
case HEART: kind = "HEART"; break; //심장
case CLOVER: kind = "CLOVER"; 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: "+kind+", number: "+number;
}
}
class Deck{
final int CARD_NUM = 52; // 52장의 카드
Card[] c = new Card[CARD_NUM];
Deck(){
int i = 0;
for(int k=Card.KIND_MAX; k>0; k--) //카드 숫자 위에서 아래로
for(int n=1; n<=Card.NUM_MAX; n++)//카드번호 1부터 13까지 증가
c[i++] = new Card(k,n);//카드값이 1씩증가
}
Card pick(int index){
if(0<=index && index<CARD_NUM)
return c[index];
else
return pick();
}
Card pick(){
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;
}
}
}
728x90
'JAVA > 예제' 카테고리의 다른 글
[JAVA] ch07-04. 객체 지향 4 (0) | 2017.08.22 |
---|---|
[JAVA] ch07-03. 객체 지향 3 (0) | 2017.08.22 |
[JAVA] ch07-01. 객체 지향 (0) | 2017.08.22 |
[JAVA] ch06-10. 배열 (Array) 10 (0) | 2017.08.22 |
[JAVA] ch06-09. 배열 (Array) 9 (0) | 2017.08.22 |
댓글