Java/Daily-Java

[자바의 정석] Exercise (7_1) +

모모토 2021. 7. 7. 11:28

해당 연습문제는 자바의 정석3판 연습문제를 참조했습니다.


 

1) shuffle

Math.random() 을 이용, 배열의 자리를 바꿔줌으로써 배열을 섞어주는 메서드

void shuffle(){
        for(int i=0; i<cards.length;i++) {
            int j = (int)(Math.random()*cards.length);
            SutdaCard tmp = cards[i];
            cards[i] = cards[j];
            cards[j] = tmp;//배열의 자리를 바꿔줌으로써 배열 섞기
        }

    }

2) pick(index)

해당하는 순서의 카드를 집어오는 메서드

SutdaCard pick(int index) {
        if(index<0||index > CARD_NUM) return null;
        return cards[index];
    }

여기서 한가지 실수했던점은 처음에 index 유효성 검사를 하지 않았던것, 

 

사용자가 온전히 우리의 생각대로 프로그램을 이용할것이라고 생각하지말자!

 

항상 유효성검사를 생각하고 사전에 오류를 잡아낼 수 있어야 함

 

3) pick()

pick(index) 를 이용하여 랜덤으로 카드를 뽑아주는 메서드를 생성,

 

pick(index) 를 이용하는 이유는 뭘까? -> 바로 유효성검사 코드를 중복하지 않을 수 있다는것

 

SutdaCard pick(){
        int random = (int)(Math.random() * cards.length);
        return pick(random);
    }

Answer

class SutdaDeck {
    final int CARD_NUM = 20;
    SutdaCard[] cards = new SutdaCard[CARD_NUM]; // 하나의 카드덱

    SutdaDeck(){
        for (int i = 0; i < cards.length; i++) {
            int num = i%10+1;

            boolean Kwang = (10 > i) && (num == 1 || num == 3 || num == 8);
            cards[i] =new SutdaCard(num, Kwang); // 하나의 카드덱에 새로운 카드20개를 생성

        }
    }

    void shuffle(){
        for(int i=0; i<cards.length;i++) {
            int j = (int)(Math.random()*cards.length);
            SutdaCard tmp = cards[i];
            cards[i] = cards[j];
            cards[j] = tmp;//배열의 자리를 바꿔줌으로써 배열 섞기
        }

    }

    SutdaCard pick(int index) {
        if(index<0||index > CARD_NUM) return null;
        return cards[index];
    }

    SutdaCard pick(){
        int random = (int)(Math.random() * cards.length);
        return pick(random);
    }

}

class SutdaCard{
    int num;
    boolean isKwang;

    SutdaCard() {
        this(1, true);
    }

    SutdaCard(int num, boolean isKwang) {
        this.num = num;
        this.isKwang = isKwang;
    }

    @Override
    public String toString() {
        return num + (isKwang ? "K" : "");
    }
}

class Exercise7_1 {
    public static void main(String[] args) {
        SutdaDeck deck = new SutdaDeck();
//        System.out.println(deck.cards.hashCode());
//        for (int i = 0; i < deck.cards.length; i++) {
//            System.out.print(deck.cards[i].hashCode() + ",");
//
//        }
        System.out.println(deck.pick(0));
        System.out.println(deck.pick(1));
        System.out.println(deck.pick());
        deck.shuffle();
        System.out.println();
        System.out.println(deck.pick(0));
        System.out.println(deck.pick(1));
        System.out.println(deck.pick());

    }
}