【问题标题】:ArrayList Iteration not working as intended [duplicate]ArrayList Iteration 未按预期工作[重复]
【发布时间】:2018-08-26 06:21:12
【问题描述】:

我正在用 Java 制作一个辅助项目,其中移动设备将存储应用程序列表 (ArrayList) 和单独的 UI 类来处理所有输入/输出和业务相关逻辑。问题出在 Mobile 类的以下块中:

public App searchApp(String name)
{
    System.out.println(list);
    for(App app: list) {
        String appName = app.getName();

        if(appName == name)
        {
            return app;
        }
   }

   throw new IllegalStateException();
}

此功能可让人们在列表中搜索应用程序。以下是从用户那里获取搜索输入的方式:

public String inputSearch()
{
    System.out.println("Enter app name to search: ");
    return sc.nextLine().trim();
}

以下是 UI 类显示结果的方式:

public void choices(int choice)
{   
    switch(choice)
    {
        case 1:
            String[] input = inputDetails();
            mobile.addApp(input[0], input[1]);
            break;

        case 2:
            String s = inputSearch();
            App found = mobile.searchApp(s);
            System.out.println("App found in search:");
            System.out.println(found.toString());
            break;            

and so on...

问题出在 searchApp 中。

我无法弄清楚为什么如果 appName 和 name 在打印时可以被视为相等(也已在两种字符串类型上使用 trim() 但仍然没有成功),如果条件不起作用。强>

【问题讨论】:

  • 只需在String 类中使用.equals 方法。 appName.equals(name)
  • 尝试使用matches(),例如nameOne.matches(nameTwo);

标签: java arrays class object arraylist


【解决方案1】:

由于nameString,您需要使用.equals() 来检查相等性(而不是==)。使用 == 检查它们是否是完全相同的对象,但使用 equals 检查它们的内容是否相同。

所以正确的方法是:

 if(appName.equals(name))
    {...

【讨论】:

    【解决方案2】:

    虽然上述答案指出了主要问题,但仍然可以通过使用一些显式/隐式空值检查来改进

    StringUtils.equals(appName, name).
    

    否则,如果 appName 为 null,你会得到一个丑陋的 NullpointerException ;-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      相关资源
      最近更新 更多