我有一个Java程序,要求用户输入五个字符串。我的目标是在列表中搜索包含“a”的特定元素。在运行代码时可以看出,它只返回第一次出现的具有元素“a”的String。列表例如:(aleah,alex,arthur,john,eerie)。
获得输出:aleah。
预期输出:应该已经退回了aleah,alex和亚瑟。
我已粘贴下面的代码,请仔细看看。
public ArrayList<String> searchName(String sn){
// String sn is the the search for character value (e.g 'a' or 'aa')
ArrayList<String> searches = new ArrayList<>();
for(String n : names){
// names list is declared in the other method and handles all the name values
// loop through the list. Am i using the right loop?
if(n.contains(sn)){
// if a specific index in the list contains the sn
searches.add(n);
// stored in in the new list searches
displaySearches(searches);
// called displaySearches and passed the arralist searches.
}
else
System.out.println("No results for " + sn);
break;
}
return searches;
}
public void displaySearches(ArrayList<String> searches){
for(String s: searches){
System.out.println(s);
// populates all the search results from the list.
}
}
答案 0 :(得分:1)
问题在于:
else
System.out.println("No results for " + sn);
break;
设置break
语句意味着它会打破完整循环,而不是检查任何其他项目 - 并且它总是在数组中的第一个字符串之后执行此操作,因为您没有放置您else
的任何括号。
删除break;
可以解决您的问题。
答案 1 :(得分:0)
您的else
声明正在此处创建问题。只需将其移除或将其放在循环外。
你可以这样做。
public ArrayList<String> searchName(String sn){
ArrayList<String> searches = new ArrayList<>();
//1. First add all the matches to the `searches` List.
for(String n : names){
if(n.contains(sn)){
searches.add(n);
}
}
//2. Now if the `searches` list is NOT empty, it means that
// there were some matches, then display those matches
if(!searches.isEmpty()) {
displaySearches(searches);
} else {
//3. Otherwise print that there wasn't any match.
System.out.println("No results for " + sn);
}
return searches;
}
public void displaySearches(ArrayList<String> searches){
for(String s: searches){
System.out.println(s);
}
}
答案 2 :(得分:0)
如果您想查找包含'A'的所有字符串,则应删除其他部分。由于在else之后不使用括号,因为break语句不会检查第二个n值。
我建议您删除其他部分代码并再次检查。此外,循环完成后可以调用显示功能。
答案 3 :(得分:0)
因为你在else条件之后打破了循环
public ArrayList<String> searchName(String sn){
// String sn is the the search for character value (e.g 'a' or 'aa')
ArrayList<String> searches = new ArrayList<>();
for(String n : names){
// names list is declared in the other method and handles all the name values
// loop through the list. Am i using the right loop?
if(n.contains(sn)){
// if a specific index in the list contains the sn
searches.add(n);
// stored in in the new list searches
displaySearches(searches);
// called displaySearches and passed the arralist searches.
}
}
if(searches.isEmpty()){
System.out.println("No results for " + sn);
}else{
displaySearches(searches);
}
return searches;
}
public void displaySearches(ArrayList<String> searches){
for(String s: searches){
System.out.println(s);
// populates all the search results from the list.
}
}