participatingUsers라는 ArrayList가 있습니다. Person에는 흥미로운 Person.money와 Person.name이 있습니다.double for 루프를 사용하여 ArrayList 내의 변수를 변경하십시오.
내가하고 싶은 것은 그 자체에 대해 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;
있습니다. 누군가가 빚을지고 부정적인 금액을 가지고 있다면, 지불 할 수있는 사람이 있는지 찾아 본 다음 그 사람에게 돈을 지불하십시오. 문제는, personToPay가 arrayList debtHaver에서 업데이트되지 않는다는 것입니다. 기본적으로 동일한 ArrayLists 대신 두 개의 다른 ArrayLists를 편집합니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?
왜 'personToPay는 ArrayList를 debtHaver 업데이트되지 않는 *는 *에'? 목록은 확실히 복사되지 않으며 개체는 참조가 아닌 복사본으로 저장됩니다. 오류나 바람직하지 않은 동작이 있습니까? – Veger
또한, 수표에 돈을 내야하는지 여부에 오류가 있다고 생각합니다. 두 개의 if 문이 서로 반대되는 관계로, 두 사람이 모두 빚을 지거나 둘 다 지불하지 않는 경우에도 항상 누군가가 지불합니다. – Veger