我正在研究ATM模拟程序。目前,我正致力于验证用户输入的方法。我有一个带银行卡对象的arraylist这些对象包含我想要的3个变量 检查给定的reknr和pasnr组合是否与我的arraylist中与bankcard对象的任何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;
}
但仍然是同样的问题。
答案 0 :(得分:4)
您只检查列表中的第一项。如果它不匹配,那么您立即返回false
而不检查其余项目。
在return false;
循环结束后移动for
。
答案 1 :(得分:0)
要通过其他内存引用来评估对象的相等性,您必须覆盖equals()
方法和hashcode()
类的rekpaspin
方法。
此外,您不应该使用ArrayList<>
并且每次都搜索它。考虑使用Set
或HashMap
答案 2 :(得分:0)
首先,如@rgettman所述,如果第一个&#39;如果&#39;检查不匹配,您自动返回false,因此需要更好地安排。
但是,在这种情况下,您可能希望使用布尔标志。它应该设置为false,直到大小写匹配,在这种情况下,您将标志设置为true。在循环之外你会返回旗帜。