-1

我对 ArrayList 中的 if 条件有疑问,请参阅代码:

public class Test {

    public static void main(String[] args) {

        ArrayList<BankAccount>accounts=new ArrayList<BankAccount>();
        BankAccount Mary=new BankAccount(1,50);
        BankAccount Lucy=new BankAccount(2,100);
        BankAccount Lily=new BankAccount(3,20);
        BankAccount Pete=new BankAccount(4,200);
        BankAccount Paul=new BankAccount(5,30);

        accounts.add(Mary);
        accounts.add(Lucy);
        accounts.add(Lily);
        accounts.add(Pete);
        accounts.add(Paul);

        double min = accounts.get(0).getBalance();
        int poorestPerson = accounts.get(0).getAccountNumber();
        for(BankAccount a:accounts) {
            if(a.getBalance()<min) {
                poorestPerson=a.getAccountNumber();
            }
        }
        System.out.println("Poorest person is "+poorestPerson);
    }
}

结果总是 5,但正确的打印应该是 3,当我添加时:

  poorestPerson=a.getAccountNumber();
  **min=a.getBalance();** 

它打印出正确的答案,我的问题是这个命令如何改变结果?干杯。

我已经了解这个命令是如何工作的,但是如果我不写min=a.getBalance();有人可以解释一下吗?,条件如何工作以及为什么打印最后一个元素?

4

4 回答 4

0

这应该可以解决您的问题

 if(a.getBalance()<min){
            poorestPerson=a.getAccountNumber();
            min=a.getBalance();
        }
于 2013-09-27T14:46:51.693 回答
0

您的问题是在循环中的 if 中更改poorestPerson 时没有设置 min

于 2013-09-27T14:47:07.250 回答
0
double min=accounts.get(0).getBalance();

此行获取第一个元素作为对列表中最小值的引用。算法要么找到一个小于这个值的值,要么只返回第一个值。

你甚至可以设置double min = Integer.MAX_VALUE;

如果您每次找到较小的值时都没有更新该值,那么搜索它就没有意义,因为您已经拥有它(列表中的第一个元素)。

min=a.getBalance();

因此,这条线是必需的。

于 2013-09-27T14:47:54.413 回答
0

实际上它确实检查并得到 3 但之后当它到达 5 时,它还会检查 30 < 50 是否为真。您需要更新min以便它可以验证所有在比较中为真的 min。

if(a.getBalance()<min){
    poorestPerson=a.getAccountNumber();
    min = a.getBalance(); // the new min
}
于 2013-09-27T14:47:57.850 回答