[英]Trying to output an if else if, else loop. using arrays and Scanners. What am i doing wrong?
[英]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.