使用for循环在数组中搜索字符串。我这样做了吗?

时间:2014-02-11 00:42:51

标签: java

如果有人能帮助理解我在这个逻辑中做错了什么,我将不胜感激。我有一个提示用户输入名称的函数,然后运行for循环以查看是否从数组中找到任何匹配项。我能够进行搜索并找到记录,我的问题是“if语句”在我包含“else语句”后立即停止工作。我感谢你的帮助。

代码:

public static void SearchByName(){  
    Scanner input = new Scanner( System.in );       
    String answer;
    String name;

    System.out.println("");
    System.out.println("\nEnter Name: ");
    name = input.next();

    for(int i = 0; i < counter; ++i){

        if(records[i].str1.equals(name)){
            System.out.println("MATCHES FOUND: " + i);
            break;
        }
        else
        {
            System.out.println("NO MATCHES FOUND");
            break;
        }

    }

    //PROMPT USER FOR MAIN MENU
    System.out.println("");
    System.out.println("\nPress \"m\" for SEARCH MAIN MENU");

    input = new Scanner( System.in );
    answer = input.next();

    if( answer.equals("m")){
        doMainMenu();
    }


}//METHOD

5 个答案:

答案 0 :(得分:2)

boolean found = false;
for(int i = 0; i < counter; ++i){

    if(records[i].str1.equals(name)){
        System.out.println("MATCH FOUND");
        found = true;
        break;
    }

}
if(!found) {
    System.out.println("NO MATCHES FOUND");
}

答案 1 :(得分:2)

您的for循环将在equals方法第一次返回false时停止。

例如,如果您在数组[Alice,Tod,Bob]中搜索“Bob”,则第一个equals评估将返回false,并且循环将在休息时结束。 只有当“Bob”是数组的第一个元素时才会起作用。

要解决此问题,您可以使用break替换else语句中的continue。请注意,在这种情况下,只能返回元素的第一个索引(如果您的数组中有多个相同的String出现)。

答案 2 :(得分:0)

想象一下,对于第一个数组位置,字符串与您要搜索的名称不匹配,因此将执行else语句。当你在其他地方有一个break时,就会停止循环。

答案 3 :(得分:0)

for循环中代码中的问题。关键词中断,意味着停止循环;

   for(int i = 0; i < counter; ++i){
        if(records[i].str1.equals(name)){
            System.out.println("MATCHES FOUND: " + i);
            break;
        }
        else
        {
            System.out.println("NO MATCHES FOUND");
            break;
        }
    }

无论break的结果如何,在调用records[i].str1.equals(name)时,循环只会执行一次。

只需删除第二个中断,代码就会运行。

提示: 当检查所有可能的匹配项时,应显示未找到匹配的消息。

答案 4 :(得分:0)

你做错了是如果你要查找的名字不在数组的第一个索引处,那么你的else语句会破坏你的for循环。即使您删除了中断,它也会在每次尝试失败后打印出“无匹配”。在我看来,你应该完全从你的for循环中删除else语句并将你的print函数放在for循环之后,如果name不在数组中,或者如果你想将它保持在for循环中你可以这样做:

    for(int i = 0; i < counter; ++i){

        if(records[i].str1.equals(name)){
            System.out.println("MATCHES FOUND: " + i);
            break;
        } else if (i == counter-1) {

            System.out.println("NO MATCHES FOUND");

        }

    }

这种循环方式通过整个字段,如果人的名字甚至不在字段的最后一个索引处,它将打印出“NO MATCHES FOUND”。希望我的评论能帮助你理解你做错了什么。如果您有任何其他问题,请随时提出。