如何使用 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
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