考虑以下代码:
class Jm44 {
public static void main(String args[]){
int []arr = {1,2,3,4};
for ( int i : arr )
{
arr[i] = 0;
}
for ( int i : arr )
{
System.out.println(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
它打印:
0
0
3
0
Run Code Online (Sandbox Code Playgroud)
这是什么?For-each应该运行在数组中的所有元素,为什么它会运行arr[3]=0但不会arr[2]=0?
Esk*_*ola 26
如果你看看arr第一个循环中发生了什么,它就变得很明显了.
int[] arr = {1, 2, 3, 4};
for (int i : arr) {
System.out.println("i = " + i);
arr[i] = 0;
System.out.println("arr = " + Arrays.toString(arr));
}
for (int i : arr) {
System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)
这打印:
i = 1 arr = [1, 0, 3, 4] i = 0 arr = [0, 0, 3, 4] i = 3 arr = [0, 0, 3, 0] i = 0 arr = [0, 0, 3, 0] 0 0 3 0
您正在使用数组中的值作为索引来修改数组中的值."foreach"循环遍历数组的值,而不是数组的索引.删除语法糖后,这是你的foreach循环实际上是:
int[] arr = {1, 2, 3, 4};
for (int index = 0; index < arr.length; index++) {
int i = arr[index];
arr[i] = 0;
}
for (int i : arr) {
System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)
为了能够索引数组,您需要使用传统的for循环,如下所示:
int[] arr = {1, 2, 3, 4};
for (int i = 0; i < arr.length; i++) {
arr[i] = 0;
}
for (int i : arr) {
System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)
int []arr = {1,2,3,4};
for ( int i : arr )
{
arr[i] = 0;
}
Run Code Online (Sandbox Code Playgroud)
在调试器中观察arr.
1,2,3,4 (initially)
1,0,3,4 (after we change arr[arr[0]], or arr[1])
0,0,3,4 (after we change arr[arr[1]], or arr[0])
0,0,3,0 (after we change arr[arr[2]], or arr[3])
0,0,3,0 (after we change arr[arr[3]], or arr[0] (no change, actually)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
622 次 |
| 最近记录: |