【问题标题】:Single object overriding an array of objects, not sure why单个对象覆盖对象数组,不知道为什么
【发布时间】:2012-03-26 04:46:51
【问题描述】:

我创建了一个方法,理想情况下应该采用单个 Account 对象,然后将其添加到一个帐户数组中,但问题是输入的 Account "add" 会覆盖数组中的每个现有 Account 并将它们都设置为 add我不知道为什么。此外,在做任何事情之前,数组帐户被设置为输入的帐户“添加”,我完全不明白为什么会这样。对不起,如果我遗漏了一些明显的东西,但任何帮助将不胜感激。

public void addAccount(Account add)
{
  if (count < accounts.length)
  {
    accounts[count] = add;
    count++;
    System.out.println("Added " + add.toString() + " to list of accounts");
  }
  else
  {
    accounts = expand(10);
    addAccount(add);
  }
}

【问题讨论】:

  • 考虑到这被否决了,我认为我提交的问题很糟糕或不正确,对此我深表歉意,请随时解释我如何改进我在这里提出的任何未来问题。
  • 恕我直言,否决票有点苛刻。你本可以更好地解释这个问题,但它已经足够清楚了。欢迎来到 SO :-)

标签: java arrays object


【解决方案1】:

您的addAccount() 方法看起来不错,您的问题很可能出在您的调用中。根据我之前看到人们遇到同样问题的方式,您看到它的原因很可能是您正在做类似的事情;

Account account = new Account();
for(int i=0; i<10; i++)
{
    account.Name = "Account #" + i;
    accAccount(account);
}

...这将创建一个帐户,更改它,添加它,更改它,添加它等等。您需要记住的是您正在创建一个单个帐户,因此更改它添加后它也会更改您之前添加到数组中的值。你需要做的是;

for(int i=0; i<10; i++)
{
    Account account = new Account();
    account.Name = "Account #" + i;
    accAccount(account);
}

这将创建 10 个帐户,效果会更好。

【讨论】:

  • 问题正是如此,我已经全局声明了我的帐户变量,但是通过在循环中本地声明它解决了我的问题。非常感谢。
  • @Vore 既然 Joachim 已经为您提供了答案(+1 良好的读心术,Joachim),您应该点击左上方的复选标记“接受”他的答案。
猜你喜欢
  • 1970-01-01
  • 2013-08-12
  • 2013-01-31
  • 2017-09-14
  • 2018-01-20
  • 1970-01-01
  • 2017-04-06
  • 2017-06-24
相关资源
最近更新 更多