Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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
Java 有人能解释一下这是怎么回事吗?_Java_Arrays_Foreach - Fatal编程技术网

Java 有人能解释一下这是怎么回事吗?

Java 有人能解释一下这是怎么回事吗?,java,arrays,foreach,Java,Arrays,Foreach,当我将所有数组元素设置为0时,每个循环都会显示一些意外结果。它不是显示所有“0”,而是提供类似“00301”的输出。无法理解这是如何工作的 a[n]=0将a[来自数组的某个\u值\u]设置为0,而不是将所有数组元素设置为0。在int[]的内容上每个循环两次。 循环1:对于1,2,3,4,1中的每个n,将索引1,0,3,0和1的数组内容设置为零。您可以通过将其更改为 int[] a = {1, 2, 3,4,1}; for (int n: a) { a[n] = 0; } for (int

当我将所有数组元素设置为0时,每个循环都会显示一些意外结果。它不是显示所有“0”,而是提供类似“00301”的输出。无法理解这是如何工作的

a[n]=0
a[来自数组的某个\u值\u]
设置为0,而不是将所有数组元素设置为0。

int[]的内容上每个循环两次。

循环1:对于
1,2,3,4,1
中的每个
n
,将索引1,0,3,0和1的数组内容设置为零。您可以通过将其更改为

int[] a = {1, 2, 3,4,1};
for (int n: a) {
    a[n] = 0;
}
for (int n: a) {
    System.out.print(n);
}
a
的内容保留为
0,0,3,0,1

循环2:对于
0,0,3,0,1中的每个
n
,打印
n

因此,您的程序在以下位置打印00301.

for (int n: a) {
    System.out.println(n);
    a[n] = 0;
}
n
是数组中特定索引的值,而不是索引本身。所以,基本上是在索引1,2,3,4,1处设置0。幸运的是,没有大于4(数组长度)或负数的值,否则将得到ArrayIndexOutOfBoundException

for (int n: a) 

for(int i=0;i正如Oracle文档所述,java for each循环隐藏了迭代器,只允许您访问iterable(数组)中的值。因此,for each循环不应用于维护原始数组,而应用于处理数组的数据。

如果要操作原始阵列,最好使用传统的for循环。

如果打印出它的功能,您将看到:

for (int i=0; i<a.length;i++){
  a[i] = 0;
} 
输出

[1,2,3,4,1]
[1]=0;->[1,0,3,4,1]
[0]=0;->[0,0,3,4,1]
[3]=0;->[0,0,3,0,1]
[0]=0;->[0,0,3,0,1]
[1]=0;->[0,0,3,0,1]

我在java中尝试,但是对于每个循环的工作在任何语言中都是一样的,我想不是C语言,它不是C++。java可能是什么?你知道你在用什么语言吗?不管它是什么,我确信它不是你所想的那样。注意你正在重复数组,并使用数组元素的值作为索引到A中。rray.使一个初始值变大(比如说,10)并观察发生了什么
a[n]=0;
行的代码不正确。它不会使索引元素为零,但会使当前值索引处的元素为零。
n
的值将是
1,2,3,4,1
如果
a[n]=0;
不存在。请尝试使用基于索引的循环将数组项设置为零(int i=0;i@DevendraJadhav我不是想给你答案,我是想告诉你如何自己得到答案,这样下次你就不用再问了。--给一个人一条鱼,你就喂他一天。教一个人钓鱼,你就喂他一辈子。非常感谢你先生给了我一个新手得到答案的方法这对我来说是必要的
int[] a = {1, 2, 3,4,1};
System.out.println(Arrays.toString(a));
for (int n: a) {
    System.out.print("a[" + n + "] = 0;  ->  ");
    a[n] = 0;
    System.out.println(Arrays.toString(a));
}