1

私は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がarrayListで更新されていないことです。debtHaverが入っています。基本的に、同じものではなく2つの異なるArrayListを編集しています。この問題に対処するための最良の方法は何ですか?

4

1 に答える 1

2

同じリストを編集しています。問題はおそらくこのコードにあります:

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

あなたは最初の行でdebtHaverの金額をゼロにしています。次に、personToPayをゼロの金額で変更しようとします。2行のコードを交換するだけで、機能するはずです。

personToPay.decreaseMoney(-debtHaver.getMoney());
debtHaver.increaseMoney(-debtHaver.getMoney());
于 2012-12-16T11:59:27.787 に答える