final int CARD_NUM = 20;
SutdaCard[] cards = new SutdaCard[CARD_NUM];
SutdaDeck() {
for(int i=0; i<CARD_NUM; i++) {
int num = i%10 + 1;
if(i==0 || i==2 || i==7)
cards[i] = new SutdaCard(num, true);
else
cards[i] = new SutdaCard(num, false);
}
}
//----------------------------------내가 작성한 답--------------------------------
void shuffle() {
for(int i=1; i<CARD_NUM; i++) {
int r = (int)(Math.random()*18) + 1;
SutdaCard sut = cards[0];
cards[0] = cards[r];
cards[r] = sut;
}
}
SutdaCard pick(int index) {
return cards[index];
}
SutdaCard pick() {
int index = (int)(Math.random()*20);
return cards[index];
}
//--------------------------------------------------------------------------------
/*--------------------------------모범답안----------------------------------------
void shuffle() {
for(int x=0; x < cards.length*2; x++) {
// 배열 index 범위 내의 임의의 두 값을 얻는다.
int i = (int)(Math.random()*cards.length);
int j = (int)(Math.random()*cards.length);
//cards[i] 와 cards[j] ㅢㅇ 값을 서로 바꾼다.
SutdaCard tmp = cards[i];
cards[i] = cards[j];
cards[j] = tmp;
}
}
SutdaCard pick(int index) {
if(index < 0 || index >=CARD_NUM) // index의 유효성을 검사한다.
return null;
return cards[index];
}
SutdaCard pick() {
int index = (int)(Math.random()*cards.length);
return pick(index); // pick(int index) 를 호출한다.
}
* pick() 메서드에서는 pick(int index) 메서드를 다시 호출한다.
다소 비효율적이지만 고드의 중복을 제거하고 재사용성을 높이기 위해
이처럼 하는 것이다.
그렇다고 너무 객체지향적인 측명에 얽매여서 코드를 짤 필요는 없다고 생각한다.
(즉 내가 return cards[index] 도 괜찮음)
--------------------------------------------------------------------------------*/
}
class SutdaCard {
int num;
boolean isKwang;
SutdaCard() {
this(1, true);
}
SutdaCard(int num, boolean isKwang) {
this.num = num;
this.isKwang = isKwang;
}
//info() 대신 Object클래스의 toString() 을 오버라이딩했다.
public String toString() {
return num + ( isKwang ? "K":"");
}
}
class Exercise7_2 {
public static void main(String[] args) {
SutdaDeck deck = new SutdaDeck();
System.out.println(deck.pick(0));
System.out.println(deck.pick());
deck.shuffle();
for (int i=0; i < deck.cards.length; i++) {
System.out.print(deck.cards[i] + ", ");
}
System.out.println();
System.out.println(deck.pick(0));
}
}
댓글 없음:
댓글 쓰기