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

Java 使用for循环在数组中搜索字符串。我这样做对吗?,java,Java,如果有人能帮助我理解我在这个逻辑上做错了什么,我将不胜感激。我有一个函数,它会提示用户输入名称,然后运行for循环,查看是否从数组中找到匹配项。我能够搜索并找到记录,我的问题是,只要我包含“else语句”,if语句就会停止工作。谢谢你的帮助 代码: public static void SearchByName(){ 扫描仪输入=新扫描仪(System.in); 字符串回答; 字符串名; System.out.println(“”); System.out.println(“\n输入名称:”);

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

代码:

public static void SearchByName(){
扫描仪输入=新扫描仪(System.in);
字符串回答;
字符串名;
System.out.println(“”);
System.out.println(“\n输入名称:”);
name=input.next();
对于(int i=0;i<计数器;++i){
if(记录[i].str1.equals(名称)){
System.out.println(“找到匹配项:+i”);
打破
}
其他的
{
System.out.println(“未找到匹配项”);
打破
}
}
//提示用户输入主菜单
System.out.println(“”);
System.out.println(“\n按“m”键搜索主菜单”);
输入=新扫描仪(System.in);
答案=输入。下一步();
如果(答案等于(“m”)){
doMainMenu();
}
}//方法
布尔查找=false;
对于(int i=0;i<计数器;++i){
if(记录[i].str1.equals(名称)){
System.out.println(“找到匹配项”);
发现=真;
打破
}
}
如果(!找到){
System.out.println(“未找到匹配项”);
}
布尔查找=false;
对于(int i=0;i<计数器;++i){
if(记录[i].str1.equals(名称)){
System.out.println(“找到匹配项”);
发现=真;
打破
}
}
如果(!找到){
System.out.println(“未找到匹配项”);
}

假设对于第一个数组位置,字符串与您正在搜索的名称不匹配,因此将执行
else
语句。由于else中有一个
break
,它将停止循环。

想象一下,对于第一个数组位置,字符串与正在搜索的名称不匹配,因此将执行
else
语句。由于else中有一个
中断
,它将停止循环。

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

例如,如果在数组
[Alice,Tod,Bob]
中搜索“Bob”,则第一个
equals
求值将返回false,循环结束于中断处。 只有当“Bob”是数组的第一个元素时,它才会起作用


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

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

例如,如果在数组
[Alice,Tod,Bob]
中搜索“Bob”,则第一个
equals
求值将返回false,循环结束于中断处。 只有当“Bob”是数组的第一个元素时,它才会起作用


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

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;
        }
    }
for(int i=0;i
无论
记录[i].str1.equals(name)
的结果如何,只要调用
中断
,循环将只执行一次

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

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

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;
        }
    }
for(int i=0;i
无论
记录[i].str1.equals(name)
的结果如何,只要调用
中断
,循环将只执行一次

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

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

错误在于,如果要查找的名称不在数组的第一个索引中,则else语句会打断for循环。即使您删除了break,它也会在每次尝试失败后打印“未找到匹配项”。在我看来,您应该完全从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");

        }

    }
for(int i=0;i

这样,for循环将通过整个字段,如果该人员的姓名甚至不在字段的最后一个索引中,它将打印“未找到匹配项”。希望我的评论能帮助你理解你做错了什么。如果您还有其他问题,请随时提问。

如果您要查找的名称不在fi中,则您的else语句会打断您的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");

        }

    }