有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

我的问题可能是格式问题。这是我的节目

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;”语句,该语句位于程序查找所搜索整数的索引之后。这不允许程序找到多个结果。假设search=3,3的索引为4和5。我编写程序的方式不允许程序找到满足前提的第二个索引


共 (3) 个答案

  1. # 1 楼答案

    你可以做的是添加一个布尔变量,告诉你是否找到了值。最初它是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.");         
    }
    
  2. # 2 楼答案

    如果找到布尔标志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.
    
  3. # 3 楼答案

    如果要在数组中找到给定数字的所有索引,需要完全遍历数组。不能使用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.");
    }