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());
    		
    	}
    
    }
    

     

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading