Java/Daily-Java

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

모모토 2021. 7. 6. 18:32

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


SutdaDeck() 안에서 배열 SutdaCard 를 구현해보자

class SutdaDeck {
    final int CARD_NUM = 20;
    SutdaCard[] cards = new SutdaCard[CARD_NUM];

    SutdaDeck(){
    	
        //SutdaCard 배열을 초기화하는 메서드
        //구현하기
        
        }
    }
}

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

        for (int i = 0; i < deck.cards.length; i++) {
            System.out.print(deck.cards[i] + ",");
        }
    }
}

SutdaDeck 은 SutdaCard 로 이루어진 카드 덱이다. 

 

문제는 1,3,8 이 적힌 카드를 K(광)으로 처리하고 , 20장중 광 카드는 세장뿐 따라서 다음과 같은 결과가 나오게끔 해야함

 

1K,2,3K,4,5,6,7,8K,9,10,1,2,3,4,5,6,7,8,9,10,

 

SutdaCard의 기본생성자는 볼 필요가 없다 처음엔 이게 거슬려서 제대로 풀지를 못했다.

 

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

 

위의 생성자 조건을 이용하자, num == 1, 3, 8 일때 isKwang이 true여야 한다.

 

SutdaDeck(){
        for (int i = 0; i < cards.length; i++) { //for문 형성
            
            cards[i] = new SudtaCard(num,ForKwang);

        }

이제 num 과 ForKwang의 조건만 맞춰주자

 

20개의 배열요소는 1~10까지 2번씩 들어가야한다(1~10까지의 카드가 한쌍씩 존재한다고 했으므로)

 

따라서 num = i%10+1; ( 참고, 0%10 = 0 , 0/10 = 0 )

 

ForKwang 은 1,3,8 일때만 true여야한다. 또한 i 에 제약을 걸어서 맨앞에 나오는 1,3,8 카드에만 광을 붙여주자

 

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

        }

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개를 생성

        }
    }
}

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