Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带条件的Java ArrayList_Java_If Statement_Arraylist - Fatal编程技术网

带条件的Java ArrayList

带条件的Java ArrayList,java,if-statement,arraylist,Java,If Statement,Arraylist,我对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=n

我对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);
    }
}
它打印出正确的答案,我的问题是这个命令如何改变结果?干杯


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

这应该可以解决您的问题

 if(a.getBalance()<min){
            poorestPerson=a.getAccountNumber();
            min=a.getBalance();
        }

if(a.getBalance()您的问题是在循环中的if中更改poorestPerson时没有设置min

double min=accounts.get(0).getBalance();
此行获取第一个元素作为列表中最小值的引用。要么算法找到一个小于此值的值,要么只返回第一个值。

您甚至可以设置
double min=Integer.MAX\u VALUE;

若并没有在每次找到较小的值时更新该值,那个么搜索它就并没有意义了,因为已经有了它(列表中的第一个元素)


因此,这一行是必需的。

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

if(a.getBalance()<min){
    poorestPerson=a.getAccountNumber();
    min = a.getBalance(); // the new min
}

if(a.getBalance()您从未将
min
重置为最小值。您必须更新“min”,如@SotiriosDelimanolis所说,再次检查您的逻辑。它将始终打印小于第一个值的最后一个值。原因是您没有重置最小值。正如您自己在帖子中提到的,您应该在完成后更新最小值找到新的元素。@WangPeiTheDancer因为列表中的最后一个元素小于原始的
min
,而且它是最后一个要计算的元素,所以您将始终看到该元素。因为最后一个元素是'30',低于'50'。如果您将最后一个元素更改为'60',那么答案将始终是3,即低于'50'的最后一个值。请解释你的否决票。此外,首先要注意他问的问题。50<30不是真的。如果不更新min,为什么它会打印最后一张?如果不更新min,情况如何?@JoshuaTaylor它是30<50。不是相反。@Sajal我知道应该是什么,但你的回答是这样的“它还检查50是否小于30,这是真的。“@WangPeiTheDancer因为你总是与索引0处的第一个余额50进行比较。所以你比较的是50<50、100<50、20<50、200<50、30<50。只有20<50和30<50是正确的。因为你没有更新最小值,所以你会在第5处得到最后一个。你可以放一份打印声明给你看。
min=a.getBalance();
if(a.getBalance()<min){
    poorestPerson=a.getAccountNumber();
    min = a.getBalance(); // the new min
}