为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

明月笑刀无情 2022-05-21 13:56:59
我有一个在 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));        }    }}
查看完整描述

3 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

您刚刚创建了数组而没有填充它,因此它将充满默认值。然后,您将迭代数组元素的值,这意味着counter每次的值都将为 0。这个循环:


for(int counter : array )

{

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

    array[counter] = in.nextInt();

}

...大致相当于:


for (int i = 0; i < array.length; i++) {

    // Note: this will always be zero because the array elements are all zero to start with

    int counter = array[i]; 

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

    array[counter] = in.nextInt();

}

您实际上根本不想迭代数组中的原始值 - 您只想从 0 迭代到数组的长度(不包括),这很容易通过for循环完成:


for (int i = 0; i < array.length; i++) {

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

    array[i] = in.nextInt();

}


查看完整回答
反对 回复 2022-05-21
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

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



查看完整回答
反对 回复 2022-05-21
?
偶然的你

TA贡献1841条经验 获得超3个赞

因为在


    for(int counter : array )

    {

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

        array[counter] = in.nextInt();

    }

counter不是计数器。它是来自数组的值。


查看完整回答
反对 回复 2022-05-21
  • 3 回答
  • 0 关注
  • 161 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信