2012-12-16 23 views
1

我有一个名为parametricUsers的ArrayList。 Person具有Person.money和Person.name,这很有趣。使用双循环更改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; 

基本上,我有一个双重for循环,我检查每个人对自身。如果某人有债务并且负金额,请寻找是否有人可以付款,然后支付该人。事情是,personToPay没有在arrayList中更新debtHaver。我基本上是编辑两个不同的ArrayLists而不是同一个。处理这个问题的最好方法是什么?

+2

'* personToPay没有在arrayList中更新debtHaver在*'为什么不是?应该是,这些列表当然不会被复制,并且这些对象通过引用存储(而不是通过复制)。你有错误或不良行为? – Veger

+0

此外,我认为你的支票是否有支付错误。由于这两个if语句是相反的,所以总是有人付钱,即使这两个人都有债务或两者都不是...... – Veger

回答

2

您正在编辑相同的列表。问题可能出现在以下代码中:

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

您正在将第一行中的debtHaver的金额设置为零。然后你尝试修改personToPay零金额。只需交换两行代码,它应该可以工作:

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

令人惊叹。我怎么会这么愚蠢...... – user1810737