2014-10-27 54 views
0

我正在制作一个涉及一副扑克牌的程序。我知道有很多方法可以制作一副扑克牌,但在这种情况下,我会将每张牌作为对象。该对象存储6个值:颜色,花色,面值,值和IDNumber。对象数组 - 数据没有正确存储在一副扑克牌上

然后通过一种名为DeckOfCardsInitialiser的方法,将52个卡片对象存储在一个数组中。该方法初始化卡,即它计算和设置对象(即卡)变量。

当检查卡片设置是否正确时,我发现所有52张卡片都分配给仅用于最后一张卡片的值,在这种情况下为黑桃王。我已经做了一些调试,并知道DeckOfCardsInitialiser按照设计工作。它只是数组的对象,并不是按计划运行。

这是我第一次使用对象数组,这让我思考我是否犯了一些愚蠢的错误。该程序从Test - > DeckOfCardsInitialiser - > Card运行。我将以相反的顺序打印,以便更易于遵循。

public class Card{ 
private static String suit =""; 
private static String face=""; 
private static String colour=""; 

private static int value; 
private static int rank; 
private static int idNum; 

public Card(){ 

} 

public static void setSuit(String x){ 
    suit = x; 
} 

public static void setFace(String x){ 
    face = x; 
} 

public static void setColour(String x){ 
    colour = x; 
} 

public static void setValue(int x){ 
    value = x; 
} 

public static void setRank(int x){ 
    rank = x; 
} 

public static void setIdNum(int x){ 
    idNum = x; 
} 

public static String getSuit(){ 
    return suit; 
} 

public static String getFace(){ 
    return face; 
} 

public static String getColour(){ 
    return colour; 
} 

public static int getValue(){ 
    return value; 
} 

public static int getRank(){ 
    return rank; 
} 

public static int getIdNum(){ 
    return idNum; 
} 

}

DeckofCardsInitialiser

public class DeckOfCardsInitialiser{ 

private static Card [] deckOfCards = new Card[52]; // makes an array with 52 cards 

// ================================================== Constructor 
// Constructor runs through all 52 'cards' and sets values to each one 
public DeckOfCardsInitialiser(){ 
    for (int counter = 0; counter < deckOfCards.length; counter++){ 
     deckOfCards[counter] = new Card(); 
     setSuits(counter); 
     setValues(counter); 
    } 
} 

// Sets suit type and colour to each card 
public static void setSuits(int x){ 
    if(x >= -1 && x <= 11){ 
     deckOfCards[x].setSuit("Hearts"); 
     deckOfCards[x].setColour("Red"); 
    } 
    if(x >= 12 && x <= 24){ 
     deckOfCards[x].setSuit("Spades"); 
     deckOfCards[x].setColour("Black"); 
    } 
    if(x >= 25 && x <= 37){ 
     deckOfCards[x].setSuit("Diamonds"); 
     deckOfCards[x].setColour("Red"); 
    } 
    if(x >= 38 && x <= 51){ 
     deckOfCards[x].setSuit("Spades"); 
     deckOfCards[x].setColour("Black"); 
    } 
} 

// Sets face, rank, value & IDnum for each card 
public static void setValues(int x){ 
    if (x == 0 || x == 13 || x == 26 || x == 39){ 
     deckOfCards[x].setFace("Ace"); 
     deckOfCards[x].setRank(13); 
     deckOfCards[x].setValue(1); 
     deckOfCards[x].setIdNum(x); 
    } 
    if (x == 1 || x == 14 || x == 27 || x == 40){ 
     deckOfCards[x].setFace("Two"); 
     deckOfCards[x].setRank(1); 
     deckOfCards[x].setValue(2); 
     deckOfCards[x].setIdNum(x); 
    } 
    if (x == 2 || x == 15 || x == 28 || x == 41){ 
     deckOfCards[x].setFace("Three"); 
     deckOfCards[x].setRank(2); 
     deckOfCards[x].setValue(3); 
     deckOfCards[x].setIdNum(x); 
    } 
    if (x == 3 || x == 16 || x == 29 || x == 42){ 
     deckOfCards[x].setFace("Four"); 
     deckOfCards[x].setRank(3); 
     deckOfCards[x].setValue(4); 
     deckOfCards[x].setIdNum(x); 
    } 
    if (x == 4 || x == 17 || x == 30 || x == 43){ 
     deckOfCards[x].setFace("Five"); 
     deckOfCards[x].setRank(4); 
     deckOfCards[x].setValue(5); 
     deckOfCards[x].setIdNum(x); 
    } 
    if (x == 5 || x == 18 || x == 31 || x == 44){ 
     deckOfCards[x].setFace("Six"); 
     deckOfCards[x].setRank(5); 
     deckOfCards[x].setValue(6); 
     deckOfCards[x].setIdNum(x); 
    } 
    if (x == 6 || x == 19 || x == 32 || x == 45){ 
     deckOfCards[x].setFace("Seven"); 
     deckOfCards[x].setRank(6); 
     deckOfCards[x].setValue(7); 
     deckOfCards[x].setIdNum(x); 
    } 
    if (x == 7 || x == 20 || x == 33 || x == 46){ 
     deckOfCards[x].setFace("Eight"); 
     deckOfCards[x].setRank(7); 
     deckOfCards[x].setValue(8); 
     deckOfCards[x].setIdNum(x); 
    } 
    if (x == 8 || x == 21 || x == 34 || x == 47){ 
     deckOfCards[x].setFace("Nine"); 
     deckOfCards[x].setRank(8); 
     deckOfCards[x].setValue(9); 
     deckOfCards[x].setIdNum(x); 
    } 
    if (x == 9 || x == 22 || x == 35 || x == 48){ 
     deckOfCards[x].setFace("Ten"); 
     deckOfCards[x].setRank(9); 
     deckOfCards[x].setValue(10); 
     deckOfCards[x].setIdNum(x); 
    } 
    if (x == 10 || x == 23 || x == 36 || x == 49){ 
     deckOfCards[x].setFace("Jack"); 
     deckOfCards[x].setRank(10); 
     deckOfCards[x].setValue(10); 
     deckOfCards[x].setIdNum(x); 
    } 
    if (x == 11 || x == 24 || x == 37 || x == 50){ 
     deckOfCards[x].setFace("Queen"); 
     deckOfCards[x].setRank(11); 
     deckOfCards[x].setValue(10); 
     deckOfCards[x].setIdNum(x); 
    } 
    if (x == 12 || x == 25 || x == 38 || x == 51){ 
     deckOfCards[x].setFace("King"); 
     deckOfCards[x].setRank(12); 
     deckOfCards[x].setValue(10); 
     deckOfCards[x].setIdNum(x); 
    } 

public static String getSuit(int x){ 
    String suit = deckOfCards[x].getSuit(); 
    return suit; 
} 

public static String getFace(int x){ 
    String face = deckOfCards[x].getFace(); 
    return face; 
} 

public static String getColour(int x){ 
    String colour = deckOfCards[x].getColour(); 
    return colour; 
} 

public static int getValue(int x){ 
    int value = deckOfCards[x].getValue(); 
    return value; 
} 

public static int getRank(int x){ 
    int rank = deckOfCards[x].getRank(); 
    return rank; 
} 

public static int getIdNum(int x){ 
    int idNum = deckOfCards[x].getIdNum(); 
    return idNum; 
} 
} 

}

测试

公共类的测试{

public static void main(String [] args){ 
    DeckOfCardsInitialiser deckOfCards = new DeckOfCardsInitialiser(); 
    for (int counter = 0; counter < 52; counter++){ 
     System.out.printf("%s of %s\n",deckOfCards.getFace(counter), deckOfCards.getSuit(counter)); 
    } 
} 

}

回答

0

你的类卡的属性被定义为静态的,这意味着它们只存在一个时间,为类。

您必须从属性以及getter和setter方法中删除static

+0

我非常感谢你托马斯 - 这在过去的24小时里一直让我感到非常悲伤! – 2014-10-27 14:03:40

+0

完成 - 工作 - 高兴!再次感谢你 – 2014-10-27 14:16:03