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);