for循环和if语句哪个有问题?(赫尔辛基慕课项目)



如果用户在数组中搜索一个数字,则系统应吐出该数字所在的索引。如果数字不在数组中,那么系统应该打印出"X未找到"。为什么这两个If语句不起作用?

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] array = new int[10];
array[0] = 6;
array[1] = 2;
array[2] = 8;
array[3] = 1;
array[4] = 3;
array[5] = 0;
array[6] = 9;
array[7] = 7;
System.out.print("Search for?");
int searching = Integer.valueOf(scanner.nextLine());
for (int i = 0; i < array.length; i++) {
if (searching == array[i]) {
System.out.println(searching + " is at index " + i);
} if (searching!= array[1]) {
System.out.println(searching +" was not found.");
break;
}
}
// Implement the search functionality here
}

}

在第二个if条件中也检查长度。此外,当找到数字时,您必须中断。

请参阅以下代码以供参考。

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] array = new int[10];
array[0] = 6;
array[1] = 2;
array[2] = 8;
array[3] = 1;
array[4] = 3;
array[5] = 0;
array[6] = 9;
array[7] = 7;
System.out.print("Search for?");
int searching = Integer.valueOf(scanner.nextLine());
for (int i = 0; i < array.length; i++) {
if (searching == array[i]) {
System.out.println(searching + " is at index " + i);
break;
}
if (searching != array[i] && i == (array.length - 1)) {
System.out.println(searching + " was not found.");
break;
}
}
// Implement the search functionality here
}

您的第二个if语句似乎总是在检查数组的索引1。

if (searching!= array[1]) {
System.out.println(searching +" was not found.");
break;
}

此外,检查不在数组中的值可能不应该发生在for循环中,而是在到达for循环的末尾而没有找到匹配项时,使用布尔值进行假设或跟踪。

if (searching!= array[1]) {
System.out.println(searching +" was not found.");
break;
}

这一行没有意义,因为在第一次迭代中,它将检查数组的第一个元素,如果不匹配,它将退出循环。

您可以通过简单地创建一个布尔变量来跟踪项目是否被找到:

boolean found = false;

然后在你的代码中:

for (int i = 0; i < array.length; i++) {
if (searching == array[i]) {
System.out.println(searching + " is at index " + i);
found = true; 
break;
//When the search is done and we find the element, we make the found true
//to indicate the search is finished. And we get out from the loop by "break"
} 
}
// If the above loop didn't get into the if statement, this will never be true, 
// indicating that the number was not found in the array.
if(!found) 
System.out.println(searching +" was not found.");

我想您想检查searching值是否是数组的一部分,并且只想打印一个最终答案。我修改了你的代码来解释我的答案:

  • 删除break;
  • searching!= array[1]更改为searching!= array[i]

    for (int i = 0; i < array.length; i++) { if (searching == array[i]) { System.out.println(searching + " is at index " + i); } if (searching!= array[i]) { System.out.println(searching +" was not found."); } }

在这个解决方案中,我们打印数组中每个元素的结果。您选择了一个包含10个元素的数组。您可以设置前8个elment的值。其余部分将默认使用0初始化。

假设CCD_ 7是CCD_。通过for循环循环将产生以下打印:

  • 未找到第一个元素6->"0。">
  • 第二个元素2->"0未找到。">
  • 第六个元素0->"0位于索引5">
  • 第七个元素7->"未找到0。">
  • 第八个元素2->"0未找到。">
  • 第九个元素0->"0在索引8处">
  • 第十个元素->"0在索引9处">

如果你想要一个答案,你可以像这个一样修改这个术语

//Searching for the element
Integer index = null;
for (int i = 0; i < array.length; i++) {
if (searching == array[i]) {
index = i;
break;  //quits the for-loop when the value searching is found
}
}
// Printing the result
if (index != null) {
System.out.println("First occurance of "+ searching + " at index " + i);
} else {
System.out.println(searching +" was not found.");
}

我希望你在编程时玩得开心。

您需要使用调试器来更好地了解循环和条件。

例如,searching!= array[1]语句的目的是什么?

以下} if (searching!= array[1]) {行中是否缺少"else"?等等

你需要更具体地回答这个问题:你期望什么行为,代码片段的实际行为是什么。然后你会在SO上得到更多的帮助和解释。

最新更新