【问题标题】:Object array is filled with all the same values对象数组填充了所有相同的值
【发布时间】:2015-04-08 13:19:01
【问题描述】:

我创建了一个名为 BingoCard 的类,我正在尝试在一个名为 BingoGame 的新类的构造函数中使用 BingoCard 数据类型填充“BingoCard”数组

public BingoGame(int numberOfCards)
{

    bingoCardArray = new BingoCard[numberOfCards];
    BingoCard card = new BingoCard();
    for(int i=0;i<numberOfCards;i++)
    {
        card.fillCard();
        bingoCardArray[i] = card;
    }
//numbers that have been called 
    numbersCalled = new ArrayList<Integer>();

}

由于某种原因,它在数组的每个索引中使用相同的 BingoCard 值填充数组,这是在数组中输入的最后一个值。例如,它用值 (A) 的 BingoCard 填充索引 0,并在循环结束时用值 (F) 的 BingoCard 填充索引 5,现在数组的所有索引都包含值 (F)。任何想法为什么会发生这种情况? (card.fillCard() 已经过测试并且可以工作,即它每次都会改变 BingoCard 的值)

【问题讨论】:

  • 您将每个设置为同一张卡。您需要为每个条目创建一个卡片。
  • card.fillCard() 会改变卡片的价值吗?创建一张新卡确实可以解决问题,但我不明白为什么
  • 因为您要更改卡的值,单数。
  • 啊我明白了,谢谢你的解释。

标签: java arrays object


【解决方案1】:

您应该在循环内创建实例:

for(int i=0;i<numberOfCards;i++)
{
    BingoCard card = new BingoCard();
    card.fillCard();
    bingoCardArray[i] = card;
}

如果在循环之前只创建一个BingoCard 实例,则数组中的所有位置都将包含相同的实例。

【讨论】:

  • 是的,谢谢你这个作品!如果没有问题,您能否向我解释为什么它用相同的值填充它的原因?
  • @Marcus 在您的代码中,您正在创建一个对象,然后将相同的对象多次添加到列表中。
  • @Marcus 您多次将同一个对象添加到数组中。每次调用 card.fillCard() 时,都会更改同一 BingoCard 对象的属性,因此在循环之后,包含同一对象的数组的所有索引将显示您在最后一次迭代。
  • @Eran 谢谢你的解释,我现在明白了。
猜你喜欢
  • 2015-12-06
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 2021-08-19
  • 2011-08-18
相关资源
最近更新 更多