Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';t';每个';Java中未初始化数组上的循环_Java_Java 11 - Fatal编程技术网

为什么';t';每个';Java中未初始化数组上的循环

为什么';t';每个';Java中未初始化数组上的循环,java,java-11,Java,Java 11,我有一个用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.lengt

我有一个用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));
        }
    }
}
import java.util.Scanner;
公共类二进制搜索{
公共静态整数秩(整数键,整数[]a){
int-lo=0;
int hi=a.长度-1;
而(低a[中])
lo=中间+1;
否则,如果(键
因为

    for(int counter : array )
    {
        System.out.println("Enter the element of the array!");
        array[counter] = in.nextInt();
    }

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

您刚刚创建了数组,没有填充它,因此它将充满默认值。然后迭代数组元素的值,这意味着
计数器的值每次都将为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();
}

foreach循环不会在数组索引上迭代,而是在数组元素上迭代。

看看这个,查看答案中提到的链接以及注释,以更好地了解每个元素的工作方式。希望这能有所帮助。作为对未来问题的补充:二进制搜索部分实际上与此无关。填充数组后只需打印出数组就可以显示问题。最好将问题限制在演示问题的最小示例内。这不是一个大问题,但值得为将来的问题了解。是的,当然,谢谢!
for (int i = 0; i < array.length; i++) {
    System.out.println("Enter the element of the array!");
    array[i] = in.nextInt();
}