在 Java 中遇到 for 循环的问题



我正在使用 for 循环检查数组中是否存在给定值,问题是它直接跳转到 else 分支并打印要检查的值(即使不满足条件(。通过消除断裂;它只遍历 if 语句一次,然后打印 if 语句 println((,然后打印 else 语句 println(( 的 6 倍。为什么会这样?

public static void main(String[] args){
checkArray(new int[]{1, 2, 3, 4, 5, 6, 7}, 4);
}
public static void checkArray(int[] q, int a){
for(int i = 0; i < q.length; i++){
if(a == q[i]){
System.out.println("Number " + a + " is indeed present!");
} else {
System.out.println("Number " + a + " is not present!");
}
break;
}
}

打印找到的消息后添加return。并将未找到的消息移动到循环之后 - 您只想在整个数组被选中后打印它。

public static void checkArray(int[] q, int a)
{
for (int i = 0; i < q.length; i++){
if (a == q[i]) {
System.out.println("Number " + a + " is indeed present!");
return;  // Immediately exit the function
}
}
// It will only get here if a is not in the array.
System.out.println("Number " + a + " is not present!");
}

此代码在第一次迭代后退出循环。如果您希望在找到值后退出循环,请尝试在if块内移动中断。

问题是,只有在您查看到最后之后,您才能说该数字不在数组中。因此,您应该在循环之后移动"Not found"println(),即在搜索到达数组末尾之后。现在,我不会只提供代码,因为SO不是一个家庭作业网站。但是一定要在谷歌或ddg上查找线性搜索。

您的代码将在第一次迭代时退出for循环,因为您将break放在循环的末尾。break基本上退出任何循环,所以你只需要删除它,它就会起作用!

它通常处于一个条件中,例如if语句。所以

if (something --> true) {
run code...
break (exits the loop).
}

此问题是由于break键工作的位置错误造成的。

您可以尝试使用以下功能。

public static void checkArray(int[] q, int a) {
for (int i = 0; i < q.length; i++) {
if (a == q[i]) {
System.out.println("Number " + a + " is indeed present!");
break;
} else {
System.out.println("Number " + a + " is not present!");
}
}
}

注意:一旦满足条件,就放break

稍微好一点的方法就是这样。

public static void checkArray(int[] q, int a) {
boolean checkFlag = false;
for (int i = 0; i < q.length; i++) {
if (a == q[i]) {
checkFlag = true;
break;
}
}
if (checkFlag) System.out.println("Number " + a + " is indeed present!");
else System.out.println("Number " + a + " is not present!");
}