Je dispose d'un participatingUsers appelé ArrayList. Personne a Person.money et Person.name qui sont intéressants.variables à l'intérieur ArrayList avec Modification des double pour boucle
Ce que je veux faire est de vérifier la ArrayList contre lui-même ...
J'ai donc ce code
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;
Fondamentalement, j'ai une double boucle où je vérifie chaque personne contre elle-même. Si quelqu'un est endetté et a une somme d'argent négative, cherchez s'il y a quelqu'un qu'il peut payer, puis payez cette personne. La chose est, personToPay est pas mis à jour dans le arrayList debtHaver est. Je suis d'édition essentiellement deux ArrayLists différents au lieu de la même. Quelle est la meilleure façon de gérer ce problème?
'* personToPay n'est pas mis à jour dans le arrayList debtHaver est dans *' Pourquoi pas? Il devrait être, les listes ne sont certainement pas copiées et les objets sont stockés par référence (pas par copie). Avez-vous une erreur ou un comportement indésirable? – Veger
De plus, je pense que vous avez une erreur dans votre vérifie si on doit payer. Les deux déclarations sont si-leur face, donc il y a toujours quelqu'un payer même si les deux personnes sont endettés ou les deux ne sont pas ... – Veger