반응형
해당 연습문제는 자바의 정석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);
}
}
'Java > Daily-Java' 카테고리의 다른 글
[자바의 정석] Exercise (7_10&11) (0) | 2021.07.08 |
---|---|
[자바의 정석] Exercise (7_1) + (0) | 2021.07.07 |
[JAVA 복습] 미니게임 WarriorVsMagician (update ver.2) (0) | 2021.05.25 |
[JAVA 복습] 미니게임 WarriorVsMagician (1) | 2021.05.18 |
[Array] 버리긴 아까운 백준 오답 (feat.MultiArray,No.4434) (0) | 2021.04.21 |