class Decktest {
public static void main(String args[]){
Deck d=new Deck();
Card c=d.pick(0);
System.out.println(c);
d.shuffle();
c=d.pick(0);
System.out.println(c);
}
}
class Deck{
final int CARD_NUM=52; //카드의 개수
Card c[]=new Card[CARD_NUM];
Deck(){ //Deck의 카드를 초기화시킨다.
int i=0;
for(int k=Card.KIND_MAX; k>0; k--){
for(int n=1; n<Card.NUM_MAX+1;n++){
c[i++]=new Card(k,n);
}
}
}
Card pick(int index){ //지정된 위치(index)에 있는 카드 하나 선택
if(0<=index && index<CARD_NUM)
return c[index];
else
return pick();
}
Card pick(){ //Deck에서 카드 하나를 선택한다.
int index=(int)(Math.random()*CARD_NUM);
return pick(index);
}
void shuffle(){ //카드의 순서를 섞는다.
for(int n=0; n<1000; n++){
int i=(int)(Math.random()*CARD_NUM);
Card temp=c[0];
c[0]=c[i];
c[i]=temp;
}
}
}//Deck 클래스의 끝
class Card{
static final int KIND_MAX=4; //카드 무늬의 수
final static int NUM_MAX=13; //무늬별 카드 수
static final int SPADE=4;
static final int DIAMOND=3;
static final int HEART=2;
static final int CLOVER=1;
int kind;
int number;
Card(){
this(SPADE,1);
}
Card(int kind,int number){
this.kind=kind;
this.number=number;
}
public String toString(){
String kind="";
String number="";
switch(this.kind){
case 4:
kind="SPADE";
break;
case 3:
kind="DIAMOND";
break;
case 2:
kind="HEART";
break;
case 1:
kind="CLOVER";
break;
default:
}
switch(this.number){
case 13:
number="K";
case 12:
number="Q";
case 11:
number="J";
default:
number=this.number+"";
}
return "kind:"+kind+",number:"+number;
}//to String의 끝
}//카드 클래스의 끝
오류 수정후 코드
-----------------------------------------------------------------------------------------------------------------------------------
오류 나는 코드
package ObjectEx2;
public class Decktest {
class Card{
static final int KIND_MAX=4; //카드 무늬의 수
final static int NUM_MAX=13; //무늬별 카드 수
static final int SPADE=4;
static final int DIAMonD=3;
static final int HEART=2;
static final int CLOVER=1;
int kind;
int number;
Card(){
this(SPADE,1);
}
Card(int kind,int number){
this.kind=kind;
this.number=number;
}
public String toString(){
String kind="";
String number="";
switch(this.kind){
case 4:
kind="SPADE";
break;
case 3:
kind="DIAMOND";
break;
case 2:
kind="HEART";
break;
case 1:
kind="CLOVER";
break;
default:
}
switch(this.number){
case 13:
number="K";
case 12:
number="Q";
case 11:
number="J";
default:
number=this.number+"";
}
return "kind:"+kind+",number:"+number;
}
}
class Deck{
final int CARD_NUM=52; //카드의 개수
Card c[]=new Card[CARD_NUM];
Deck(){ //Deck의 카드를 초기화시킨다.
int i=0;
for(int k=Card.KIND_MAX; k>0; k--){
for(int n=1; n<Card.NUM_MAX+1;n++){
c[i++]=new Card(k,n);
}
}
}
Card pick(int index){ //지정된 위치(index)에 있는 카드 하나 선택
if(0<=index && index<CARD_NUM)
return c[index];
else
return pick();
}
Card pick(){ //Deck에서 카드 하나를 선택한다.
int index=(int)(Math.random()*CARD_NUM);
return pick(index);
}
void shuffle(){ //카드의 순서를 섞는다.
for(int n=0; n<1000; n++){
int i=(int)(Math.random()*CARD_NUM);
Card temp=c[0];
c[0]=c[i];
c[i]=temp;
}
}
}
}
// TODO Auto-generated method stub
Deck d=new Deck(); //카드 한벌(Deck)를 만든다
Card c=d.pick(0); //오류발생! pick 오류
System.out.println(c); //System.out.println(c.toString());와같다
d.shuffle();
c=d.pick(0);
System.out.println(c);
//빨간 부분이 오류이고 오류는 undifined pick(int index)~~ 이였습니다
오류는 단순한 스코프 범위를 맟추지 않아서 였습니다..
Decktest 클래스를 Deck 클래스가 끝난후 }로 닫아버렸습니다
그래서 안되더라구요....
근데 여기서 의문점이 한개 더 생겼습니다.
어째서 DeckTest 안에 Card 클래스와 Deck 클래스가 모두 있을때는 오류가 나지않고
DeckTest안에 Deck클래스만 있을때는 오류가 생기는 걸까요..
Deck 클래스에는 Card라는 함수를 포함시켰으니깐
DectTest 밖에서 class Card를 만들어도
Deck안에는 Card 클래스의 정보가 포함되있는 것 아닌가요??
전에올린글 답변들 보고 자세히 살펴보고 오류를 수정하고 의문점이 해결됬는데
해결되니 또다른 의문점이 생겨서 질문드립니다 ㅠㅠ... 매일 밤마다 질문글 올려서 죄송합니다.