【问题标题】:Clarification on for-loops [closed]澄清for循环[关闭]
【发布时间】:2014-04-14 03:58:08
【问题描述】:

有没有人介意澄清一下我如何才能让 for 循环递增到我提出的代码块中的下一个对象?我知道外部是递增一,但是,像这段代码一样,在 for 循环中递增一,因为在这种情况下,每个元素都代表一个对象。建议将不胜感激!

   // create object
    AccountWithInterface accountTemplate = new AccountWithInterface(name, balance, id, rate);

    // declare array of 3 objects
    AccountWithInterface[] accountArray = new AccountWithInterface[3];


    // create each accountArray object
    for(int i = 0; i < accountArray.length; i++) {
        // copy each element (object) from accountTemplate
        accountArray[i] = (AccountWithInterface)accountTemplate.clone();
        // set balance for first object
        accountArray[i].setBalance(85900.32);
        // increment to next object/set object
        accountArray[i].setBalance(3250.99);
        System.out.println(accountArray[i].toString());
    }


           // My output currently keeps printing:
    ID:                            1122
    Created:                   04/13/14
    Owner:                          Bob
    Annual Rate:                   4.50%
    Balance:                   3,250.99

    ID:                            1122
    Created:                   04/13/14
    Owner:                          Bob
    Annual Rate:                   4.50%
    Balance:                   3,250.99

    ID:                            1122
    Created:                   04/13/14
    Owner:                          Bob
    Annual Rate:                   4.50%
    Balance:                   3,250.99

【问题讨论】:

  • 实际上,关于如何递增到下一个对象的澄清是我认为我在这里真的不理解的。
  • accountArray 中有空值。
  • “增加下一个对象”是什么意思...?您正在递增i,因此通过访问循环内的数组索引[i],您正在遍历数组。 i 是 0,然后是 1,然后是 2。这不是你想要的吗?
  • 嗯...有点。总的来说,我的目标是保持每个对象分开并更改所有 3 个对象的平衡,然后使用我的 toString 方法打印出每个对象的平衡。
  • 考虑到每个对象都是帐户模板的克隆,并且您对每个对象执行相同的操作,因此它们看起来都相似也就不足为奇了。 :P 如果你想对每个人做不同的事情,那么在循环中做这件事有点违背了目的——除非你有一系列余额并做类似accountArray[i].setBalance(balances[i]);的事情。

标签: java arrays object logic


【解决方案1】:

很难说出你在问什么,但猜测一下......如果你想设置特定对象的平衡,只需在循环之外进行:

// create each accountArray object
for(int i = 0; i < accountArray.length; i++) {
    // copy each element (object) from accountTemplate
    accountArray[i] = (AccountWithInterface)accountTemplate.clone();
}

// set balance for first object
accountArray[0].setBalance(85900.32);
// set balance for second object
accountArray[1].setBalance(3250.99);

for(int i = 0; i < accountArray.length; i++) {
    System.out.println(accountArray[i].toString());
}

另一种选择是:

// create each accountArray object
for(int i = 0; i < accountArray.length; i++) {
    // copy each element (object) from accountTemplate
    accountArray[i] = (AccountWithInterface)accountTemplate.clone();
    if (i == 0)
        accountArray[i].setBalance(85900.32);
    else if (i == 1)
        accountArray[i].setBalance(3250.99);
    System.out.println(accountArray[i].toString());
}

甚至是这样的:

double[] balances = new double[] {85900.32, 3250.99};

// create each accountArray object
for(int i = 0; i < accountArray.length; i++) {
    // copy each element (object) from accountTemplate
    accountArray[i] = (AccountWithInterface)accountTemplate.clone();
    if (i < balances.length)
        accountArray[i].setBalance(balances[i]);
    System.out.println(accountArray[i].toString());
}

选择最适合您的情况。你有很多选择。

【讨论】:

  • 我真的不喜欢第二种选择,但我同意第一种和第三种选择。
  • @Makoto 同意;总的来说,整个事情有点臭。我想知道为什么 OP 首先需要这样做,可能有更好的更高级别的方法来组织此代码。
  • 感谢 Jason,我试图将所有内容都保持在一个循环中。我知道我可以将每个对象的设置器分开,但我想我试图留在循环中。感谢您现在对您的代码进行澄清。谢谢+1
  • @user3434674 不客气!希望这些例子能给你一些关于什么是可能的想法。在您的原始代码中,您对每个对象 [i] 都做了完全相同的事情,这就是为什么它们都一样。
  • 另外,根据 Jason 的经验,对于我的程序使用最少的内存以及最“高效”的方式,您会建议哪种方式?
猜你喜欢
  • 2015-08-28
  • 2012-11-09
  • 2014-06-26
  • 2014-05-11
  • 2022-01-03
  • 2013-02-18
  • 1970-01-01
  • 2016-08-26
相关资源
最近更新 更多