【问题标题】:How to detect a string within an ArrayList with a for each loop?如何使用每个循环检测 ArrayList 中的字符串?
【发布时间】:2020-07-29 03:18:48
【问题描述】:

公共字符串搜索编号(字符串名称){ 字符串结果 = "";

    for(Person search: person){
        if(search.getName().contains(name)){
            result += search.getNumber();
        }
        else{
            result = " number not known ";
        }
    }
    return result;

}

在这里寻找一些关于如何解决我遇到的问题的建议。这是一种我希望使用我的 getName 方法来查看本地实例(名称)是否在 ArrayList 中的方法。但是,我只显示后一个结果,说“数字未知”。我的分步过程是这样的:我创建一个 Person 实例(搜索),访问 getName 方法,访问 contains 方法,因为它最初是一个 String 方法,然后检查本地实例是否在数组列表。如果我的逻辑不正确,请纠正我。此外,访问 person 数组是否会阻止我在 for-each 循环中使用 String 类型,因为它是 Person 对象?我尝试使用 String 类型执行此操作,但由于无法在 for-each 循环中转换为 String,因此无法继续。

【问题讨论】:

  • 除了打印“number not known”之外还有其他问题吗?结果是否如你所愿?
  • @ShivashriganeshMahato 我只收到返回的消息。只有在 arrayList 中找不到名称的情况下才应该返回。我不确定我写的条件是否正确。

标签: java arraylist contains instantiation


【解决方案1】:

以下是您当前代码的细分:

您考虑person 列表中的每个对象。如果该人的姓名与参数匹配,则您从中获取号码。否则,将result 设置为错误消息。请注意,如果发现 NOBODY 具有相同的名称,则 else 子句适用于每个人,而不是最后。也就是说,即使您找到合适的人并将result 分配给他们的号码,如果下一个人不正确,那么您会再次将result 覆盖到错误消息中。

为了确保错误信息只分配一次,并且只有在找到 NOBODY 时才分配,您需要在通过每个人之后检查是否正确(因为在检查每个人之前您无法知道是否找不到人!)。现在的诀窍是找到一些在没有人找到时总是正确的子句。但这可能只是在result 从未被修改过的情况下。也就是说,您可以在声明时将result 设置为默认值,然后仅在找到合适的人时将其修改为数字。另外,我假设应该只找到一个人,并且您不想实际将这些数字连接在一起(这就是您使用 += 所做的事情)。也就是说,试试这个:

public String searchNumber(String name){
    for (Person search: person){
        if (search.getName().contains(name)){
            return search.getNumber();
        }
    }

    return " number not known ";
}

【讨论】:

  • 是的,只有本地实例的名称,当方法被调用时。如果你不介意,你能指出我的特别错误吗?我会很感激的。
  • 主要问题是你在循环中有你的 else 语句。就像我在解释中提到的那样,即使您找到了正确的人并用他们的号码更新了result,如果下一个人是错误的(他们很可能是错误的),那么result 将再次被错误消息覆盖。
  • 为什么你找到Person后一直循环。如果有成千上万的用户,这可能是一个瓶颈。
  • @ScaryWombat 非常正确,相应地更新了我的答案。
  • @ShivashriganeshMahato 我明白了。我忽略了没有办法阻止它,就像传统的循环一样。谢谢。
【解决方案2】:

基本上你找到你的记录后就可以返回

String notFound = " number not known ";
for(Person search: person){
    if(search.getName().contains(name)){
        return search.getNumber();
    }
}
return notFound;

【讨论】:

    【解决方案3】:
    String result = null;
    for(Person search: person){
        if(search.getName().contains(name)){
            result += search.getNumber();
        }
    
    }
    if(result == null){
        result = "number not known ";
    }
    return result;
    

    由于没有办法知道for-in循环中的最后一个元素,所以替代方案是基于result == null

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      • 2021-02-10
      • 2011-01-27
      相关资源
      最近更新 更多