【问题标题】:Adding objects to an arraylist in java在java中将对象添加到arraylist
【发布时间】:2013-10-29 09:53:57
【问题描述】:

我正在尝试在 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");
 }

【问题讨论】:

  • 没有看到您正在打印输出的代码,我们真的无法帮助您。我有一些关于问题所在的理论,但首先,请在您的原始帖子中添加不起作用的代码。
  • 您的打印声明是什么样的?你能提供Card的构造函数吗?
  • 只是一条评论说 a) 您不需要为每个循环添加一个新变量,b) 如果您要将 1 添加到循环变量中,那么为什么不这样做 for (int i=1; i &lt;= 13; i++) ...跨度>
  • 我怀疑问题出在您的打印程序中。上面的代码显示OK。
  • 我添加了打印功能代码和构造函数。

标签: java object arraylist add


【解决方案1】:

问题在于您的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;
}

valueTemp 设置为value,将suitTemp 设置为suit,并将statusTemp 设置为status,当您实际上想在构造函数中执行相反的操作时。

【讨论】:

  • ^ 我也注意到了这一点
【解决方案2】:
public Card(int valueTemp, String suitTemp, String statusTemp) {
  valueTemp = value;
  suitTemp = suit;
  statusTemp = status;
}

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

public Card(int value, String suit, String status) {
  this.value = value;
  this.suit = suit;
  this.status = status;
}

【讨论】:

    【解决方案3】:

    分配是向后的。

    lValue = rValue;

    lValue 是你想要设置的东西,rValue 是你想要它变成的数据。

    当你这样做时:

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

    您正在将参数valueTempsuitTempstatusTemp 更改为valuesuitstatus 的任何参数。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      • 2023-04-06
      • 2013-10-30
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      相关资源
      最近更新 更多