Languages/Java

[자바 중급 개념] 01. 상속

Dev다D 2021. 3. 5. 23:15
반응형

카드 셔플러

 

Card 클래스

(1) public final int suitNumber

카드의 모양을 뜻합니다. 카드 모양에는 정수 1, 2, 3, 4로 표현되는 '클로버(Clubs)', '하트(Hearts)', '다이아몬드(Diamonds)', '스페이드(Spades)'가 있습니다.

한 번 정해지면 바뀔 이유가 없기 때문에 final입니다. 또한 특별히 getter가 필요 없기 때문에 public 입니다.

(2) public final int rankNumber

카드의 값을 뜻합니다. 1, 11, 12, 13은 각각 'Ace', 'Jack', 'Queen', 'King'로 표현되고, 2~10은 그 숫자 자체로 표현됩니다.

마찬가지로 한 번 정해지면 바뀔 이유가 없기 때문에 public final입니다.

(3) public Card(int suitNumber, int rankNumber)

파라미터로 정수형 suitrank를 받고, 인스턴스 변수 suitrank에 각각 지정해줍니다. 1 <= suit <= 4, 1 <= rank <= 13라고 가정합시다!

(4) public String getSuit()

변수 suit의 숫자 값에 해당하는 슈트(suit)를 리턴해줍니다.

(5) public String getRank()

변수 number의 숫자 값에 해당하는 카드 랭크를 리턴해줍니다.

(6) public String toString()

카드를 "{랭크} of {슈트}" 방식으로 예쁘게 요약해줍니다.

 

Deck 클래스

(1) private ArrayList<Card> cards

덱에 있는 카드를 보관하는 ArrayList입니다.

(2) public ArrayList<Card> getCards()

카드 목록을 리턴해줍니다.

(3) public void addCard(Card card)

파라미터로 card를 받고 cards에 추가해줍니다.

(4) public void print()

카드 목록에 있는 모든 카드를 출력합니다. 출력할 때는 카드 인스턴스의 toString 메소드를 사용하세요.

(5) public void shuffle()

cards의 순서를 뒤죽박죽 섞습니다. Random 클래스를 이용해서 완전히 랜덤하게 섞어주세요!

(6) public Deck deal(int count)

먼저 hand라는 새로운 Deck 인스턴스를 만드세요. count5면 현재 덱의 cards의 마지막 다섯 장을 빼고, 그 다섯 장을 handcards에 넣어주세요. 그리고 hand를 리턴해주면 됩니다.

 


package Ex0108;

public class Card {
    public final int suitNumber;
    public final int rankNumber;

    public Card(int suitNumber, int rankNumber) {
        this.suitNumber = suitNumber;
        this.rankNumber = rankNumber;
    }

    public String getSuit() {
        switch (suitNumber) {
            case 1:
                return "Clubs";
            case 2:
                return "Diamonds";
            case 3:
                return "Hearts";
            case 4:
                return "Spades";
            default:
                return "";
        }
    }

    public String getRank() {
        switch (rankNumber) {
            case 1:
                return "Ace";
            case 11:
                return "Jack";
            case 12:
                return "Queen";
            case 13:
                return "King";
            default:
                return String.valueOf(rankNumber);
        }
    }

    public String toString() {
        return getRank() + " of "  + getSuit();
    }
}
package Ex0108;

import java.util.ArrayList;
import java.util.Random;

public class Deck {

    private ArrayList<Card> cards;

    public Deck() {
        cards = new ArrayList<Card>();
    }

    public void addCard(Card card) {
        cards.add(card);
    }

    public ArrayList<Card> getCards() {
        return cards;
    }

    public void print() {
        for (Card card : cards) {
            System.out.println(card.toString());
        }
    }

    public void shuffle() {
        Random random = new Random();

        for (int i = 0; i < cards.size(); i++) {
            int randIndex = random.nextInt(cards.size());
            Card temp = cards.get(i);
            cards.set(i, cards.get(randIndex));
            cards.set(randIndex, temp);
        }
    }

    public Deck deal (int count) {
        Deck hand = new Deck();

        for (int i = 0; i < count; i++) {
            hand.addCard(cards.remove(0));
        }

        return hand;
    }

}

본 내용은 Codeit의  '자바 기초' 강의를
참고하여 작성한 내용입니다.

 

반응형