如果有人能帮助理解我在这个逻辑中做错了什么,我将不胜感激。我有一个提示用户输入名称的函数,然后运行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
答案 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”。希望我的评论能帮助你理解你做错了什么。如果您有任何其他问题,请随时提出。