0

我正在尝试在 java 上编写一个纸牌游戏。我正在尝试将卡片对象添加到我的数组列表中,但 MakeDeck 函数无法正常工作。

public class PileOfCards {
public ArrayList<Card> pile = new ArrayList<Card>();
Card tempo;

public PileOfCards() {
  pile = new ArrayList<Card>();

}

public void MakeDeck() {

    for (int i=0;i<13;i++){
        tempo = new Card(i+1, "FaceDown", "Clubs");
        pile.add(tempo);

    }
    for (int j=0;j<13;j++){
        tempo = new Card(j+1, "FaceDown", "Diamonds");
        pile.add(tempo);
}
    for (int k=0;k<13;k++){
        tempo = new Card(k+1, "FaceDown", "Hearts");
        pile.add(tempo);
    }
    for (int l=0;l<13;l++){
        tempo = new Card(l+1, "FaceDown", "Spades");
        pile.add(tempo);
    }
} 

当我尝试打印值时,它会打印 "0, null, null" 52 次。问题是什么?看起来我无法访问 ArrayList,但我不知道为什么。

编辑:

卡片构造函数:

   public Card(int valueTemp, String suitTemp, String statusTemp) {
    valueTemp = value;
    suitTemp = suit;
    statusTemp = status;
    }

打印功能:

 public void printPile(){
     for(int i=0;i<pile.size();i++){
     System.out.print(pile.get(i).status);
     System.out.print(" ");
     System.out.print(pile.get(i).suit);
     System.out.print(" ");
     System.out.print(pile.get(i).value);
     System.out.printf("\n");
 }
4

3 回答 3

5

问题出在您的Card构造函数中;分配是错误的方式。

你要

public Card(int valueTemp, String suitTemp, String statusTemp) {
    value = valueTemp;
    suit = suitTemp;
    status = statusTemp;
}

相反,不将字段设置为等于参数,而是将参数设置为等于字段。具体来说,你以前有什么

public Card(int valueTemp, String suitTemp, String statusTemp) {
   valueTemp = value;
   suitTemp = suit;
   statusTemp = status;
}

当您实际上想要在构造函数中执行相反的操作时,设置为valueTempvalue和。suitTempsuitstatusTempstatus

于 2013-10-21T03:05:36.057 回答
2
public Card(int valueTemp, String suitTemp, String statusTemp) {
  valueTemp = value;
  suitTemp = suit;
  statusTemp = status;
}

所有这些任务都是从头到尾的。您正在分配参数而不是它们。习惯上是这样写的:

public Card(int value, String suit, String status) {
  this.value = value;
  this.suit = suit;
  this.status = status;
}
于 2013-10-21T03:06:31.237 回答
1

作业是倒退的。

lValue = rValue;

lValue是您要设置的东西,rValue而是您希望它成为的数据。

当你这样做时:

public Card(int valueTemp, String suitTemp, String statusTemp) {
    valueTemp = value;
    suitTemp = suit;
    statusTemp = status;
}

您正在将作为参数传入的参数valueTemp、、suitTemp和更改statusTemp为任何value、、suitstatus

要解决此问题,请翻转您分配的值,如下所示:

public Card(int valueTemp, String suitTemp, String statusTemp) {
    value = valueTemp;
    suit = suitTemp;
    status = statusTemp;
}
于 2013-10-21T03:12:39.983 回答