私は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を編集しています。この問題に対処するための最良の方法は何ですか?