为什么Java中未初始化数组上的'For each'不循环

我有一个在 Java 中进行二进制搜索的程序。在为数组输入输入后,“for-each”循环似乎没有增加计数器变量。但是,它确实适用于常规的“for”循环。为什么在这种情况下'for-each'循环不能增加计数器?


import java.util.Scanner;


public class binarySearch {

    public static int rank(int key, int[] a) {

        int lo = 0;

        int hi = a.length - 1;


        while (lo <= hi) {

            int mid = lo + (hi - lo) / 2;

            if (key > a[mid])

                lo = mid + 1;

            else if (key < a[mid])

                hi = mid - 1;

            else

                return mid;

        }

        return -1;

    }


    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        System.out.println("Enter the key to be searched");

        int key = in.nextInt();

        System.out.println("\nEnter the number of elements in the array");

        int num = in.nextInt();

        int[] array = new int[num];


        for (int counter : array) {

            System.out.println("Enter the element of the array!");

            array[counter] = in.nextInt();

        }

        int result = rank(key, array);

        if (result == -1) {

            System.out.println("\n The given key is not found!\n");

        } else {

            System.out.println("\n The given key is found at position : " + (result + 1));

        }

    }

}


明月笑刀无情
浏览 162回答 3
3回答

白衣非少年

您刚刚创建了数组而没有填充它,因此它将充满默认值。然后,您将迭代数组元素的值,这意味着counter每次的值都将为 0。这个循环:for(int counter : array ){&nbsp; &nbsp; System.out.println("Enter the element of the array!");&nbsp; &nbsp; array[counter] = in.nextInt();}...大致相当于:for (int i = 0; i < array.length; i++) {&nbsp; &nbsp; // Note: this will always be zero because the array elements are all zero to start with&nbsp; &nbsp; int counter = array[i];&nbsp;&nbsp; &nbsp; System.out.println("Enter the element of the array!");&nbsp; &nbsp; array[counter] = in.nextInt();}您实际上根本不想迭代数组中的原始值 - 您只想从 0 迭代到数组的长度(不包括),这很容易通过for循环完成:for (int i = 0; i < array.length; i++) {&nbsp; &nbsp; System.out.println("Enter the element of the array!");&nbsp; &nbsp; array[i] = in.nextInt();}

牛魔王的故事

foreach 循环不会遍历数组索引,而是遍历数组元素。

偶然的你

因为在&nbsp; &nbsp; for(int counter : array )&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("Enter the element of the array!");&nbsp; &nbsp; &nbsp; &nbsp; array[counter] = in.nextInt();&nbsp; &nbsp; }counter不是计数器。它是来自数组的值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java