Java 常规For-Loop与增强For-Loop

Java 常规For-Loop与增强For-Loop,java,for-loop,foreach,Java,For Loop,Foreach,此代码: import java.util.*; import java.io.*; class TestClass { public static void main(String args[] ) throws Exception { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int arr[] =

此代码:

import java.util.*;
import java.io.*;

class TestClass {
    public static void main(String args[] ) throws Exception {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int m = sc.nextInt();
        int arr[] = new int[n];
        for(int i = 0; i < n; i++) arr[i] = sc.nextInt();

        for(int i : arr) System.out.println(arr[i]);



    }
}
通过此输入:

5 1
1 2 3 4 1
另一方面 此代码:

import java.util.*;
import java.io.*;

class TestClass {
    public static void main(String args[] ) throws Exception {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int m = sc.nextInt();
        int arr[] = new int[n];
        for(int i = 0; i < n; i++) arr[i] = sc.nextInt();

        for(int i = 0; i < n; i++) System.out.println(arr[i]);



    }
}

在第一个代码片段中,foreach循环应该打印数组的元素,但我不知道这些数字是什么,以及这些数字是如何构成数组的元素的。

因为下面这行

for(int i : arr) System.out.println(arr[i]);
您正在打印
arr[i]
而不是
i
本身 这里
arr[i]
根据您的输入,尝试访问1,2,3,4和1处的元素,如下所示

arr[0]-->1
arr[1]-->2
arr[2]-->3
arr[3]-->4
arr[4]-->1
然而,增强for循环在每次迭代中给出的值不是索引

用下面的行替换它,您将看到相同的输出

for(int i : arr) System.out.println(i);

增强的
for
循环提供值,但您将它们用作索引。要使增强的
for
循环等效于传统的
for
循环,只需使用该值,而不是访问数组

for(int value : arr) System.out.println(value);

让我们先看看传统的循环:

for(int i = 0; i < n; i++) System.out.println(arr[i]);
现在,增强的for循环:

for(int i : arr) System.out.println(arr[i]);
在这种情况下,
i
不是索引,而是存储在数组中的值。因此,当您编写
arr[i]
时,您所做的是从数组中取出一个值(
i
),将其视为一个索引,并在新索引处从数组中取出值

如果希望增强型循环按预期方式运行,请执行以下操作:

for(int i : arr) System.out.println(i);

虽然使用
i
作为变量名的做法很糟糕,因为通常预期
i
是一个索引,所以如果您想让代码更清晰,请使用
i
以外的名称。

您认为
i
这里是什么:
for(int i:arr)
?它包含哪些值?@Tom我认为它是一个迭代器,每次包含一个数组元素。正确,那么为什么要编写
System.out.println(arr[I])
?@Tom我明白了,谢谢你。我应该打印我。
`arr[i]`, you're getting the element at position `i`.
for(int i : arr) System.out.println(arr[i]);
for(int i : arr) System.out.println(i);