提问者:小点点

如何完全耗尽此数组中的项?


我正在尝试编写一个程序,要求用户在数组中搜索一个数字。 如果数组包含给定的数字,则程序告知包含该数字的索引。 如果数组不包含给定的数字,程序将通知未找到该数字。

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

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和5。 我让程序编写的方式将不允许程序找到满足前提的第二个索引。


共3个答案

匿名用户

您所能做的是添加一个布尔变量,它告诉您是否找到了该值。 最初它是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<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
}