2014-02-23 2 views
0

그래서 나는 int rank와 int suit를 포함하는 객체를 만드는 PlayingCard 클래스를 가지고 있습니다.루프에서 오브젝트의 새 이름을 제공하는 방법은 무엇입니까?

public class PlayingCard 
{ 
private int rank; 
private int suit; 


public PlayingCard(int rank1, int suit1) //PlayingCard Constructor 
{ 
    rank = rank1; 
    suit = suit1; 
} 


public int getRank() //Get method to retrieve value of card Rank 
{ 
    if(rank >0 && rank <15) 
    { 
     return rank; 
    } 
    else 
     return 0; 
} 


public String getSuit() //Get method to retrieve value of card Suite 
{ 

    while (suit >0 && suit <5) 
    { 
     if (suit == 1) 
     { 
      return "Clubs"; 
     } 
     else if (suit == 2) 
     { 
      return "Diamonds"; 
     } 
     else if (suit == 3) 
     { 
      return "Hearts"; 
     } 
     else 
     { 
      return "Spades"; 
     } 
    } 

    return "Invalid suit"; 
} 


@Override //Overrides default Java toString method 
public String toString() 
{ 
    String strSuit = ""; 

    switch(suit) 
    { 
     case 1: strSuit = "Clubs"; 
      break; 
     case 2: strSuit = "Diamonds"; 
      break; 
     case 3: strSuit = "Hearts"; 
      break; 
     case 4: strSuit = "Spades"; 
      break; 
     default: strSuit = "Invalid Suit"; 
      break; 
    } 

    String output = getClass().getName() + "[suit = " +strSuit + ", rank = " 
        +rank + "]"; 

    return output; 
} 


public String format() //Allows individual cards to be displayed in a 
{      //Specific format. 
    String strSuit = ""; 

    switch(suit) 
    { 
     case 1: strSuit = "Clubs"; 
      break; 
     case 2: strSuit = "Diamonds"; 
      break; 
     case 3: strSuit = "Hearts"; 
      break; 
     case 4: strSuit = "Spades"; 
      break; 
     default: strSuit = "Invalid Suit"; 
      break; 
    } 

    return rank + " of " + strSuit + ", "; 
} 

@Override 
public boolean equals(Object y) //Method for evaluating Object equality. 
{ 

    if (getClass() != y.getClass()) //Checks if both object are from the 
    {        //Same class. 
     return false; 
    } 

    if (y == null) //Checks if second object is empty or non-existent. 
    { 
     return false; 
    } 

    PlayingCard other = (PlayingCard) y; 
    return rank == other.rank && suit == other.suit; 
} 
} 

그런 다음 내 클래스를 사용하여 카드 덱을 만드는 것을 시뮬레이트해야하는 PackBuilder라는 프로그램을 만들어야합니다.

문제는 각 개체에 새 이름을 지정하는 방법이 확실하지 않습니다. 나는 배열이 같은 생각 :

while(rank < 15) 
     { 
      PlayingCard cardDeck[1] = new PlayingCard(rank, suit); 
     } 

그러나

(난 그냥 배열 실 거예요 작업을 사용하여 잘못 할 경우, 또는 수도 경우 메신저 확실하지) cardDeck가 이미 정의되어 있음을 말한다 내가 원하는 52 개의 카드가 각각 자신의 수트/랭크 콤보 카드를 가지고있을 때까지 나는 'card1' 'card2' 'card3'과 같이 될 것입니다.

+0

배열 색인에는 이름이 없으며 가질 수 없습니다. 배열 색인은 숫자로 액세스됩니다. – Radiodef

답변

1

배열 cardDeck 배열의 두 번째 요소 (인덱스 1)에 PlayingCard을 할당하려고 시도 할 때마다이 입니다. 또한 cardDeck 어레이는 즉시 의 하단에있는 while 루프의 각 반복에 버려집니다. 루프 내부에만 존재합니다.

변경 무한 루프를 방지하기 위해이

PlayingCard[] cardDeck = new PlayingCard[52]; 

int i = 0; 
while(rank < 15) 
    { 
     cardDeck[i++] = new PlayingCard(rank, suit); 
    } 

같은이

while(rank < 15) 
    { 
     PlayingCard cardDeck[1] = new PlayingCard(rank, suit); 
    } 

는 변경

cardDeck[i++] = new PlayingCard(rank, suit); 

cardDeck[i++] = new PlayingCard(rank++, suit); 

다른 문제가있을 수 있지만 이것은 좋은 것으로 시작됩니다. (편의를 위해) 카드의

+0

하지만'rank'를 업데이트하지 마십시오 – mangusta

+0

이 객체/배열 할당 문제는 여기서 다루고있는 유일한 문제입니다. 이 큰 문제가 해결 될 때까지 계급을 업데이트하는 것은 의의가 있습니다. – aliteralmind

+1

하지만 루프가 잘못되었습니다 - 영원히갑니다 – mangusta

0

갑판 :
소송 당 14 개 카드를 가정 (내가 14 가정, 계급의 정확한 번호를 모르는)

순위 및 카드의 소송 주어, 당신은 그것을 통해 얻을 수

cardDeck[(rank-1)*4 + (suit-1)]

PlayingCard cardDeck = new PlayingCard[56]; 

int rank, suit, i = 0; 

for(rank=1; rank<=14; rank++) 
{ 

    for(suit=1; suit<=4; suit++) 

    cardDeck[i++] = new PlayingCard(rank, suit);  


} 
0

수업을 사용해야합니까? 이것을 3 열거 형 세트로하는 것이 더 좋을 것입니다. 숫자를 확인하고 소송에 대한 문자열을 반환하는 get 메서드는 모든 종류의 잘못입니다. suite가 열거 형이라면 이름과 번호 (서수)로 참조 할 수 있습니다.

두 개의 중첩 루프는 건물 파트에 대한 가장 간단한 솔루션입니다.

그러나 이름이 지정된 카드 갑판을 원한다면 '카드 == QueenOfSpades 인 경우'와 같이 할 수 있습니다. 예를 들어, 더 창조적 인 뭔가를해야 할 것입니다. 순위와 정장에서 이름을 가져 와서 Of를 사용하여 중첩 루프를 만듭니다. 이것이이 질문을 흥미롭게 만드는 이유입니다. 분명히 할 수는 없습니다. 프로그래밍 방식으로 열거 형 이름을 지정할 수는 없습니다.

귀하의 갑판 열거 형에 52 개의 명명 된 요소가있을 수 있음을 의미합니다.DeceOfSpades, DeuceOfHearts 등을 통해 AceOfSpades 등을 수행 할 수 있습니다.

또 다른 옵션은 계급 및 소송에 대한 열거 형을 작성한 다음 클래스 갑판에서 카드를 생성 한 다음 내부에 넣고 카드를 가져 오는 방법입니다. 이름, 예. deck.getAceOfHearts(). 그런 다음 일종의 반복자 인터페이스를 통해 무작위로 카드를 제공 할 수도 있습니다. getNextCard().

관련 문제