我正在开发一个自动柜员机模拟程序。目前,我正在研究验证用户输入的方法。我有一个包含银行卡对象的arraylist,这些对象由3个变量组成,我想检查给定的reknr和pasnr组合是否等于我的arraylist中包含银行卡对象的reknr和pasnr组合。如果arraylist包含给定的组合,则该方法必须返回true,否则它必须返回false。
public static boolean reknrpasnrCheckOke(String reknr,String pasnr){
for (int i=0; i<rekpaspin.size(); i++){
if (rekpaspin.get(i).reknr.equals(reknr) && rekpaspin.get(i).pasnr.equals(pasnr))
return true;
}
return false;
}
}输入是什么并不重要,它总是返回false,如何解决这个问题?
编辑::
我在if后面忘了一个{,所以我把代码改成:
public static boolean reknrpasnrCheckOke(String reknr,String pasnr){
for (int i=0; i<rekpaspin.size(); i++){
if (rekpaspin.get(i).reknr.equals(reknr) && rekpaspin.get(i).pasnr.equals(pasnr)){
return true;
}
}
return false;
}但仍然存在同样的问题。
发布于 2014-03-21 00:13:53
您只检查列表中的第一项。如果不匹配,则立即返回false,而不检查其余项。
在for循环结束后移动return false;。
发布于 2014-03-21 00:15:36
要通过内存引用以外的方法计算对象的相等性,必须重写rekpaspin类的equals()方法和hashcode()方法。
此外,您不应该每次都使用ArrayList<>进行搜索。考虑使用Set或HashMap
发布于 2014-03-21 00:24:16
首先,正如@rgettman所说,如果第一个' if‘检查不匹配,您将自动返回false,因此需要更好地安排它。
但是,在这种情况下,您可能希望使用布尔标志。它应该设置为false,直到大小写匹配,在这种情况下,您应该将该标志设置为true。在循环之外,您将返回标志。
https://stackoverflow.com/questions/22538858
复制相似问题