繁体   English   中英

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

[英]Searching for a string within an array using for loop. Am I doing this right?

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

码:

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
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");
}

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

例如,如果您在数组[Alice,Tod,Bob]搜索“ Bob”,则第一个equals评估将返回false,并且循环在中断处结束。 仅当“ Bob”是数组的第一个元素时,它才有效。

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

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

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

   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;
        }
    }

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

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

提示:当选中所有潜在的匹配项时,应显示未找到匹配项的消息。

您做错的是,如果要查找的名称不在数组的第一个索引处,则else语句会中断for循环。 即使您删除中断,它也会在每次尝试失败后打印出“找不到匹配项”。 我认为您应该从for循环中完全删除else语句,并将打印函数放在for循环之后,以防万一名称不在数组中,或者如果您希望将其保留在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");

        }

    }

这种遍历整个字段的循环方式,如果该人的名字甚至不在该字段的最后一个索引处,它将打印出“找不到匹配项”。 希望我的评论能帮助您了解您做错了什么。 如果您还有其他问题,请随时提出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM