如何使用 for each 循环检测 ArrayList 中的字符串?

How to detect a string within an ArrayList with a for each loop?

public String searchNumber(字符串名称){ 字符串结果 = "";

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

}

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

这是您当前代码的细分:

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

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

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

    return " number not known ";
}

基本上你可以return找到你的记录

String notFound = " number not known ";
for(Person search: person){
    if(search.getName().contains(name)){
        return search.getNumber();
    }
}
return notFound;
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