JAVA/예제

[JAVA] ch07-02. 객체 지향 2

밍글링글링 2017. 8. 22.
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

댓글