我如何完全耗尽这个数组中的项目?

How do I completely exhaust the items in this array?

我正在尝试编写一个程序,要求用户输入要在数组中搜索的数字。如果数组包含给定的数字,程序会告诉包含该数字的索引。如果数组不包含给定的数字,程序将提示找不到该数字。

我的问题可能是格式问题。这是我的程序。

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int[] array = new int[8];

    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 - 1; i++) {
        
        if (array[i] == searching) {
            System.out.println(searching + " is at index " + i + ".");
            break;
        }
        if (i == array.length-1 && searching != array[i]) {
                System.out.println(searching +" was not found.");
                break;
            }
    }
}

我不喜欢在程序找到所搜索整数的索引后必须添加 'break;' 语句的方式。这不允许程序找到多个结果。假设搜索 = 3 和 3 位于 4 AND 5 的索引处。我编写程序的方式不允许程序找到满足前提的第二个索引。

您可以做的是添加一个布尔变量,告诉您是否已找到该值。最初它是 false,但当您找到匹配值时将其更新为 true

boolean found = false;
for (int i = 0; i <= array.length - 1; i++) {
    
    if (array[i] == searching) {
        System.out.println(searching + " is at index " + i + ".");
        found = true;
    }
}

循环后,检查是否找到值:

if (!found) {
    System.out.println(searching +" was not found.");         
}

如果找到(至少一次),您可以将布尔标志 found 指定为 true

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] array = new int[8];

        array[0] = 6;
        array[1] = 2;
        array[2] = 8;
        array[3] = 1;
        array[4] = 3;
        array[5] = 3;
        array[6] = 9;
        array[7] = 7;

        System.out.print("Search for? ");
        int searching = Integer.parseInt(scanner.nextLine());
        boolean found = false;
        for (int i = 0; i <= array.length - 1; i++) {

            if (array[i] == searching) {
                System.out.println(searching + " is at index " + i + ".");
                found = true;
            }

        }
        if (!found)
        {
            System.out.println(searching +" was not found.");
        }
    }

输出:

Search for? 3
3 is at index 4.
3 is at index 5.

Search for? 10
10 was not found.

如果你想在数组中找到给定数字的所有索引,你需要完全遍历数组。您不能使用 break 语句来停止迭代。

您可以将给定数字的所有索引放在 List 中。要检查数组中是否至少存在一次数字,请在循环结束后检查 List 的大小。

List<Integer> indexList = new ArrayList<>();

for (int i = 0; i <= array.length - 1; i++) {
     if (array[i] == searching) {
         indexList.add(i);
     }
}

if (indexList.size() == 0) {
    System.out.println(searching +" was not found.");
} else {
    // iterate over indexList and print all the indexes
}

或者,您可以使用一些标志变量来检查是否至少找到了一次数字,并且此检查应该在循环之外。

boolean exists = false;

for (int i = 0; i <= array.length - 1; i++) {
     if (array[i] == searching) {
         exists = true;
         System.out.println(searching + " is at index " + i + ".");
     }
}

if (!exists) {
    System.out.println(searching +" was not found.");
}