2014년 1월 5일 일요일

[7-2]

class SutdaDeck {
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));
}
}

댓글 없음:

댓글 쓰기