java - 使用双 for 循环更改 ArrayList 中的变量

标签 java algorithm for-loop arraylist

我有一个名为 participatingUsers 的 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,而不是同一个 ArrayList。处理此问题的最佳方法是什么?

最佳答案

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

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

您在第一行将 debtHaver 的金额设置为零。然后您尝试将 personToPay 修改为零金额。只需交换两行代码就可以了:

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

关于java - 使用双 for 循环更改 ArrayList 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13900986/

相关文章:

java - 使用 Collections.min/max 查找多个最小值/最大值

java - 如何同时调用两个参与者,即并行?

java - 无符号 16 位和 64 位整数

c - Tic Tac Toe Minimax 算法?

ios - 将 NSDictionary 添加到数组

java - 生成 UI 组件

python - 在非二叉树中查找从根到叶的每条路径的优化方法

C++ 循环展开性能差异(Project Euler)

javascript - 在函数内返回一个 for 循环

algorithm - Python快速异或超范围算法