【问题标题】:Which is the problem, the for loop or the if statement? (Helsinki MOOC project)哪个是问题,for 循环或 if 语句? (赫尔辛基 MOOC 项目)
【发布时间】:2020-05-11 22:19:22
【问题描述】:

如果用户在数组中搜索一个数字,系统应该吐出该数字所在的索引。如果该数字不在数组中,则系统应打印出“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 语句与array[1] 比较,而不是array[i]

标签: java arrays for-loop if-statement


【解决方案1】:

在第二个 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
    }

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢,埃里克。我修好了那个。
    【解决方案3】:
    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.");
    

    【讨论】:

    • 搜索?7 7 未找到。 7 没有找到。 7 没有找到。 7 没有找到。 7 没有找到。 7 没有找到。 7 没有找到。 7 在索引 7 这是打印出来的。我知道发生了什么,但我只希望它打印出一行。要么找到号码,要么没有。出于某种原因,它会为每次失败的尝试打印一次。而且,它把语句向后打印???
    【解决方案4】:

    我猜你想检查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 个元素的值。其余的将默认使用0 初始化。

    假设searching0。遍历 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.");
    }
    

    祝你在编程时玩得开心。

    【讨论】:

    • 对此表示赞同。谢谢。学习编程现在有非常高的高点和非常低的低点。哈哈
    【解决方案5】:

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

    例如searching!= array[1]声明的目的是什么?

    下面的行} if (searching!= array[1]) { 中是否缺少“else”?等等……

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

    【讨论】:

    • 感谢您的澄清。显然我是新来的,我会尽量照顾好,但这是我学习这个的第 4 周,这有点棘手。所以“1”应该是“i”。我认为“ if (searching != array[i]) { 的意思是,如果 int 搜索不等于 array[i]...那么...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 2018-05-27
    • 1970-01-01
    • 2020-03-24
    • 2017-07-19
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多