【问题标题】:ArrayList check for combination of two object values at the same indexArrayList 检查同一索引处的两个对象值的组合
【发布时间】:2014-04-27 15:29:44
【问题描述】:

我正在开发一个 ATM 模拟程序。目前我正在研究验证用户输入的方法。我有一个带有银行卡对象的数组列表,这些对象由我想要的 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;
 }

但还是同样的问题。

【问题讨论】:

  • arraylist 中存储了什么?要与传递的参数进行比较的字符串?
  • 良好的格式可以帮助您立即发现问题。
  • 不确定是否错字,但您的 if 语句后缺少 {
  • 如果你总是有两个的组合并且你的名字是主键,你可以使用 Map&lt;String,String&gt; 来解决这个更简单的问题。

标签: java arraylist


【解决方案1】:

您只检查列表中的第一项。如果不匹配,则立即返回false,而不检查其余项目。

for 循环结束后移动return false;

【讨论】:

    【解决方案2】:

    要通过内存引用以外的方式评估对象的相等性,您必须覆盖 rekpaspin 类的 equals() 方法和 hashcode() 方法。

    此外,您不应使用ArrayList&lt;&gt; 并每次都搜索它。考虑使用SetHashMap

    【讨论】:

      【解决方案3】:

      首先,正如@rgettman 所说,如果第一个'if'检查不匹配,您会自动返回false,因此需要更好地安排。

      但是,在这种情况下,您可能希望使用布尔标志。在大小写匹配之前,它应该设置为 false,在这种情况下,您应该将标志设置为 true。在循环之外,您将返回标志。

      【讨论】:

        猜你喜欢
        • 2016-03-08
        • 1970-01-01
        • 2017-03-12
        • 1970-01-01
        • 2020-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多