Java 对象数组-一副卡的数据存储不正确

Java 对象数组-一副卡的数据存储不正确,java,arrays,object,Java,Arrays,Object,我正在制作一个包含一副牌的程序。我知道有很多方法可以创建一副牌,但在本例中,我将每张牌都作为一个对象。此对象存储6个值:颜色、套装、面部、价值、等级和ID号 然后通过一种称为DeckOfCardsInitialiser的方法,52个卡片对象存储在一个数组中。此方法初始化卡,即计算并设置对象,即卡变量 当检查卡片是否正确设置时,我发现所有52张卡片都被分配给了仅用于最后一张卡片的值,在本例中为黑桃王。我已经做了一些调试,并且知道DeckOfCardsInitialiser正在按设计工作。它只是数组

我正在制作一个包含一副牌的程序。我知道有很多方法可以创建一副牌,但在本例中,我将每张牌都作为一个对象。此对象存储6个值:颜色、套装、面部、价值、等级和ID号

然后通过一种称为DeckOfCardsInitialiser的方法,52个卡片对象存储在一个数组中。此方法初始化卡,即计算并设置对象,即卡变量

当检查卡片是否正确设置时,我发现所有52张卡片都被分配给了仅用于最后一张卡片的值,在本例中为黑桃王。我已经做了一些调试,并且知道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));
    }
}

}

您的类卡属性被定义为静态属性,这意味着它们对于类只存在一次


您必须从属性、getter和setter方法中删除static。

非常感谢Thomas,在过去的24小时里,这让我非常难过!
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));
    }
}