JAVA:搜索arraylist中的项目只会返回第一项

时间:2016-10-20 07:01:22

标签: java arraylist data-structures

我有一个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.

    }


}

4 个答案:

答案 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.

    }


}