我对ArrayList中的条件有疑问,请参阅代码:
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(); ,有人可以解释一下,条件是如何工作的,为什么它会打印最后一个元件?
答案 0 :(得分:0)
这应该可以解决您的问题
if(a.getBalance()<min){
poorestPerson=a.getAccountNumber();
min=a.getBalance();
}
答案 1 :(得分:0)
你的问题是你在循环中的if中更改poorestPerson时没有设置min
答案 2 :(得分:0)
double min=accounts.get(0).getBalance();
此行获取第一个元素作为对列表中最小值的引用。算法找到的值小于此值,或者只返回第一个值。
您甚至可以设置double min = Integer.MAX_VALUE;
如果每次找到较小的值时都不更新该值,那么搜索它就没有意义,因为你已经拥有它(列表中的第一个元素)。
min=a.getBalance();
因此,这一行是必需的。
答案 3 :(得分:0)
实际上它确实检查并获得3但在此之后当它达到第5时,它还检查30&lt; 50这是真的。您需要更新 min ,以便它可以验证比较中出现的所有分钟。
if(a.getBalance()<min){
poorestPerson=a.getAccountNumber();
min = a.getBalance(); // the new min
}