【发布时间】:2015-03-17 21:05:28
【问题描述】:
我正在制作一个疯狂的 8 人 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;
}
}
对于这个“if”语句,我要让它检查 player2 手中任何一张牌的任何“suitFaceNumber”或“cardFaceNumber”是否与“suitFaceNumber”或“cardFaceNumber”匹配起始卡,而不是一张一张地做。
“如果”语句
if(player2Hand[0].cardFaceNumber==startingCard.cardFaceNumber ||
player2Hand[4].suitFaceNumber==startingCard.suitFaceNumber ){
}
【问题讨论】:
-
您正在打印目标卡的内存位置。尝试显示时必须调用 toString() 。 (我看到你覆盖了 toString 所以它很好)
-
为什么不把你的“if”逻辑封装在一个for循环中来遍历手中的所有牌呢?
-
@dan Rank 和扑克牌套装是枚举类型的主要候选者。
-
我不明白为什么“if”语句中的条件使用 0 和 4 - 大概它应该是相同的值,如 Solano 所建议的索引。
标签: java arrays java-collections-api