2015-01-19 1 views
1

Я делаю сумасшедшую карточную игру eights java и делаю массив карт для одной руки игроков, но когда я пытаюсь распечатать эту руку, это беспорядок случайных персонажи. У меня также есть класс карты, но, похоже, все в порядке. Пожалуйста помоги.Как сделать массив карт Также как легко их сопоставить

Ошибка:

Welcome to Crazy Eights!(Type 0 to start) 
0 
Your Hand: 
[LnnajiO.Card;@73ae74f5 

Класс карты:

import java.util.Random; 
public class Card { 

//All of the card numbers, in strings 
final String[] FACESTRINGS = {"" , "Ace" , "Two", "Three", "Four", "Five", "Six", 
     "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King" }; 
//All of the card numbers as integers 
final int[] FACENUMS = {0,1,2,3,4,5,6,7,8,9,10,11,12,13}; 
final String[] SUITSTRINGS = {"Hearts", "Diamonds", "Spades", "Clubs"}; 
final int[] SUITNUMS = {1,2,3,4}; 

int FaceNumIndex; 
int SuitIndex; 
int cardFaceNumber; 
String cardFaceString; 
int suitFaceNumber; 
String suitFaceString; 
Random rand = new Random(); 

    //Default Random Card that assignes a random suit and number 
public Card(){ 
    int tempSuit = rand.nextInt(3); 
    int tempNumber = rand.nextInt(13)+1; 
    FaceNumIndex = tempNumber; 
    cardFaceNumber = FACENUMS[tempNumber]; 
    cardFaceString = FACESTRINGS[tempNumber]; 
    suitFaceNumber = SUITNUMS[tempSuit]; 
    suitFaceString = SUITSTRINGS[tempSuit]; 

} 

    //Overrides the default 
public Card(int suit, int face){ 
    //Return 1-13 for the face and 0-3 for the suit 
    FaceNumIndex = face; 
    SuitIndex = suit; 
    cardFaceNumber = FACENUMS[face]; 
    cardFaceString = FACESTRINGS[face]; 
    suitFaceNumber = SUITNUMS[suit]; 
    suitFaceString = SUITSTRINGS[suit]; 
} 

public void setFaceName(int faceName){ 
    //Takes an int to set the Suit of the card input 1-13 
    FaceNumIndex = faceName; 
    cardFaceNumber = FACENUMS[faceName]; 
    cardFaceString = FACESTRINGS[faceName]; 
} 

public void setSuitName(int suitName){ 
    //Takes an int 1-4 to set the suit name from the array 
    SuitIndex = suitName; 
    suitFaceNumber = SUITNUMS[suitName]; 
    suitFaceString = SUITSTRINGS[suitName]; 
} 
//Returns Face Values 
public int getFace(){ 
    return FACENUMS[FaceNumIndex]; 
} 
public String getFaceName(){ 
    return FACESTRINGS[FaceNumIndex]; 
} 

//Return Suit Values 
public int getSuit(){ 
    return SUITNUMS[SuitIndex]; 
} 
public String getSuitName(){ 
    return SUITSTRINGS[SuitIndex]; 
} 

//Compares this card to the returned class 
public boolean isHigherThan(Card passCard, boolean AceHigher){ 
    int tempCardSuit = passCard.getSuit(); 
    int tempCardFace = passCard.getFace(); 
    if (tempCardFace>FaceNumIndex){ 
     return false; 
    }else if (tempCardFace<FaceNumIndex){ 
     return true; 
    }else{ 
     if (tempCardSuit>SuitIndex){ 
      return false; 
     }else if(tempCardSuit<SuitIndex){ 
      return true; 
     }else{ 
      System.out.println("The Cards are equal"); 
      return false; 
     } 
    } 

} 

//Override for previous isHigherThan 
public boolean isHigherThan(Card PassCard){ 

    return isHigherThan(PassCard, true); 

} 

public String toString(){ 
    return cardFaceString + " of " + suitFaceString; 
} 

public boolean isHigherThan(int i, String string) { 
    // TODO Auto-generated method stub 
    return false; 
} 
} 

Кроме того, для этого "если" заявление, которое я должен был сделать это так, что он будет проверять, если какой-либо из «suitFaceNumber »или« cardFaceNumber »любой из карт в руках игрока2 соответствуют« suitFaceNumber »или« cardFaceNumber »стартовой карты вместо того, чтобы делать это один за другим.

"если" заявление

if(player2Hand[0].cardFaceNumber==startingCard.cardFaceNumber || 
    player2Hand[4].suitFaceNumber==startingCard.suitFaceNumber){ 

} 
+3

Вы печатаете МЕСТОПОЛОЖЕНИЕ ПАМЯТИ вашей объектной карты. При попытке показать это нужно вызвать toString(). (Как я видел, вы переопределили toString так хорошо) – Solano

+0

Почему бы вам не включить вашу логику «если» в цикле for, чтобы пересечь все карты в руке? – Solano

+0

@dan Ранг и костюм игральных карт являются первыми кандидатами на типы перечислений. – laune

ответ

0

Ваш метод

public String toString(){...} 

в отпечатках карты класса одна карта, но если у вас есть

Card[] hand 

это не автоматически применяется к элементам массива. Вам нужно будет написать метод, повторяющий массив.

В качестве альтернативы напишите класс Hand, который затем будет иметь собственную строку toString.

+0

он уже сделал это. возможно, он не вызывает toString в методе печати – Solano

+1

@ Solano Saw, но «мусор» из массива, поэтому ... – laune

Смежные вопросы