我试图理解我的else语句是如何在这个简单的程序中被访问的,基本上,我想要做的是循环遍历一个随机数组,如果找到该项,文本将显示演示它已被发现。如果没有找到,我使用继续进行下一次迭代。如果根本没有找到它,那么一条语句会跳转,说明在数组上找不到该项目。
import java.util.*;
public class practice {
public static void main(String[] args) {
int myA[] = new int[11];
int toS = 59;
Random f = new Random();
for(int j = 0; j < myA.length; j++){
myA[j] = f.nextInt(10);
}
System.out.println("The array has");
for(int x = 0; x < myA.length; x++){
System.out.println(myA[x]);
}
System.out.println("Loop through elements");
System.out.println("loop test");
for(int u = 0; u < myA.length; u++){
if(myA[u] == toS){
System.out.println("Item found" );
break;
}
if(myA[u] != toS){
continue;
}
else{
System.out.println("Item not in list");
break;
}
}// end of loop
}//After this no more code
}
我是否过度思考这个?我使用调试器来逐步完成这些过程,我看到continue语句是从循环中跳出来而不是传递给else语句而结束的。我该如何修复迭代?如果我删除了continue块,代码只会检查第一次迭代。
谢谢你们的时间。
答案 0 :(得分:4)
你不应该在循环中使用continue
。
boolean itemFound = false;
for(int u = 0; u < myA.length; u++){
if(myA[u] == toS){
itemFound = true;
break;
}
}// end of loop
if (itemFound) {
System.out.println("Item found" );
} else {
System.out.println("Item not in list");
}
答案 1 :(得分:2)
你输入的else语句没有输入,因为它已经被前一个if语句所覆盖,该语句从循环中断开:
if(myA[u] == toS){
System.out.println("Item found" );
break;
}
if(myA[u] != toS){
continue;
}
else{ // myA[u] == toS - never happens, since previous if statement broke from the loop
System.out.println("Item not in list");
break;
}
您的逻辑可以通过这种方式处理,使用布尔变量:
boolean found = false;
for(int u = 0; u < myA.length; u++){
if(myA[u] == toS){
System.out.println("Item found" );
found = true;
break;
}
}
if (!found) {
System.out.println("Item not in list");
break;
}
请注意,只有在循环结束后,您才能检查是否找到了该项目。
答案 2 :(得分:0)
查看以下代码段
if(myA[u] == toS){
System.out.println("Item found" );
break;
}
if(myA[u] != toS){
continue;
}
在任何可能的情况下,toS将等于myA [u]或不等于它,
如果它是相等的那么'break'语句被执行并且它来自for循环, 如果它不相等'continue'语句被执行,那么它就会出现在正常的迭代循环中
所以你的else循环永远不会运行,因为没有条件会导致2个if循环中的一个不执行
希望这有帮助!
祝你好运!