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