对于Java中的每个循环

时间:2014-09-17 22:46:08

标签: java arrays foreach

我有一个示例代码,它创建一个大小为10的“数组”,并尝试在For循环中使用反向值初始化它,例如:(9,8,7,6,5 ... 0):

int[] array = new int[10];
        for (int i = array.length - 1, j = 0; i >= 0; i--, j++) {
            System.out.println("Present value of i=" + i
                    + " Present value of j=" + j);
            array[j] = i;
            System.out.println("Array:" + j + "=" + i);
        }
        for (int k : array) {
            System.out.println(array[k]);
        }

到目前为止一切顺利。这是控制台的输出,非常完美:

Present value of i=9 Present value of j=0
Array:0=9
Present value of i=8 Present value of j=1
Array:1=8
Present value of i=7 Present value of j=2
Array:2=7
Present value of i=6 Present value of j=3
Array:3=6
Present value of i=5 Present value of j=4
Array:4=5
Present value of i=4 Present value of j=5
Array:5=4
Present value of i=3 Present value of j=6
Array:6=3
Present value of i=2 Present value of j=7
Array:7=2
Present value of i=1 Present value of j=8
Array:8=1
Present value of i=0 Present value of j=9
Array:9=0

问题在于最后的For-each循环只是在数组中打印值:

for (int k : array) {
            System.out.println(array[k]);
        }

打印数组的值为0,1,2 ... 9,其中应为9,8,7 ... 0

当我使用常规For循环打印数组时,它可以正常工作。我在这里错过了一些有趣的事吗?

3 个答案:

答案 0 :(得分:11)

您已经使用foreach循环从array中获取了值,您将其再次用作数组中的索引,再次按顺序生成值。

只需打印k即可。变化

for (int k : array) {
    System.out.println(array[k]);
}

for (int k : array) {
    System.out.println(k);
}

输出结束:

9
8
7
6
5
4
3
2
1
0

答案 1 :(得分:6)

基本上,由于(int k : array)导致k遍历数组中的,而不是索引,所以您所做的相当于

System.out.println(array[array[0]]);
System.out.println(array[array[1]]);
System.out.println(array[array[2]]);
System.out.println(array[array[3]]);
...
System.out.println(array[array[9]]);

这不是你想要的。

答案 2 :(得分:0)

这个for循环,对于(int k:array)基本上是给你详细的数组值这个for循环就像 -

int k = array [0] = 9 int k = array [1] = 8 .....

再次你试图打印数组[9],数组[8]给你的结果像0,1,2 ...... 更换 for(int k:array){     System out println(阵列[K])。。 }

与 for(int k:array){     System out println(K)。。 }