【问题标题】:Altering variables inside ArrayList with double for loop使用双 for 循环更改 ArrayList 中的变量
【发布时间】:2023-04-09 01:44:01
【问题描述】:

我有一个名为参与用户的 ArrayList。 Person 有 Person.money 和 Person.name 很有趣。

我想要做的是对照自身检查 ArrayList...

所以我有这个代码

    for (Person debtHaver : this.participatingUsers) {

        // If they're in debt...
        if (debtHaver.getMoney() < 0) {

            // With someone...
            for (Person personToPay : this.participatingUsers) {

                // That's not themselves...
                if (!debtHaver.getName().equals(personToPay.getName())) {
                    // See if the personToPay is ranked higher than the
                    // debtHaver...
                    if (personToPay.getMoney() > 0) {

                        // If the debtee can pay the debter in full
                        if (-debtHaver.getMoney() <= personToPay.getMoney()) {
                            payment += debtHaver.getName() + " has to pay " + personToPay.getName() + " " + -debtHaver.getMoney() + "\n";
                            debtHaver.increaseMoney(-debtHaver.getMoney());
                            personToPay.decreaseMoney(-debtHaver.getMoney());
                        }

                        if (-debtHaver.getMoney() > personToPay.getMoney())
                        {
                            //But if he can't pay in full... Just pay the small bit you can pay.
                            payment += debtHaver.getName() + " has to pay " + personToPay.getName() + " " + personToPay.getMoney() + "\n";
                            debtHaver.increaseMoney(personToPay.getMoney());
                            personToPay.decreaseMoney(personToPay.getMoney());
                        }
                    }
                }
            }
        }
    }
    return payment;

基本上,我有一个双重 for 循环,我在其中检查每个人的自身。如果有人负债并且有负数的钱,请寻找是否有人可以支付,然后支付给那个人。问题是,personToPay 没有在 debtHaver 所在的arrayList 中更新。我基本上是在编辑两个不同的 ArrayList,而不是同一个。处理此问题的最佳方法是什么?

【问题讨论】:

  • 'personToPay 没有在arrayList 中的debtHaver 中更新' 为什么不呢?应该是,列表肯定不会被复制,并且对象是通过引用(而不是通过复制)存储的。您是否收到错误或不良行为?
  • 此外,我认为您的支票是否需要付款有误。由于这两个 if 语句是相反的,所以即使两个人都欠债或都没有债务,总会有人付钱......

标签: java algorithm for-loop arraylist


【解决方案1】:

您正在编辑同一个列表。问题可能出在这段代码中:

debtHaver.increaseMoney(-debtHaver.getMoney());
personToPay.decreaseMoney(-debtHaver.getMoney());

您在第一行将debtHaver 的金额设为零。然后你尝试用零金额修改 personToPay。只需交换两行代码,它应该可以工作:

personToPay.decreaseMoney(-debtHaver.getMoney());
debtHaver.increaseMoney(-debtHaver.getMoney());

【讨论】:

    猜你喜欢
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多