为什么输出此代码111111?
这是代码。 我试图解决它,但我无法理解它的输出是如何的111111?
public class Test { public static void main(String[] args) { int list[] = {1, 2, 3, 4, 5, 6}; for (int i = 1; i < list.length; i++) list[i] = list[i - 1]; for (int i = 0; i < list.length; i++) System.out.print(list[i] + " "); } }
for (int i = 1; i < list.length; i++) list[i] = list[i - 1];
相当于:
list [1] = list [1-1] = list [0] = 1
list [2] = list [2-1] = list [1] = 1
list [3] = list [3-1] = list [2] = 1
list [4] = list [4-1] = list [3] = 1
list [5] = list [5-1] = list [4] = 1
得到它了?
输出为1 1 1 1 1 1
因为第一个for
语句循环遍历一个名为list
的数组(即{1, 2, 3, 4, 5, 6}
),并用前一个替换每个,从第二个开始(索引1
;或者,如某些人所说,第一个“真正的”第一个是第0个……我离题了)。 因此,第二(索引1
)项的当前值( 2
)被第一(索引0
)项的值替换,其为1
:( list[i] = list[i - 1];
其中i = 1
)。 这继续沿整数数组运行,直到我们到达list
的末尾。 当我们用之前的值替换每个值时,它们最终都会变成相同的值 – 数组中第一个项的值,即1
。 最后,我们list
这个值: {1, 1, 1, 1, 1, 1}
。
下一个for
语句依次打印出更新list
每个值,后跟一个空格: System.out.print(list[i] + " ");
。 因此,正如您所看到的,运行此代码的结果是它打印出1 1 1 1 1 1
。
只是为了以更直观的方式驱动点回家,让我们只是随着时间的推移绘制list
数组的值:
int i = 1; // i = 1 list[i] = list[i - 1]; // list[1] = list[1 - 1]; list[0] == 1 // list is now {1, 1, 3, 4, 5, 6} i++; // i = i + 1 # i is now 2 list[i] = list[i - 1]; // list[2] = list[2 - 1]; list[1] == 1 // list is now {1, 1, 1, 4, 5, 6} i++; // i = i + 1; i = 3 list[i] = list[i - 1]; // list[3] = list[3 - 1]; list[2] == 1 // list is now {1, 1, 1, 1, 5, 6} i++; // i = i + 1; i = 4 list[i] = list[i - 1]; // list[4] = list[4 - 1]; list[3] == 1 // list is now {1, 1, 1, 1, 1, 6} i++; // i = i + 1; i = 5 list[i] = list[i - 1]; // list[5] = list[5 - 1]; list[4] == 1 // list is now {1, 1, 1, 1, 1, 1} i++; // i = i + 1; i = 6 i < list.length; // i == 6; list.length == 6; 6 < 6 == false // exit the for loop
我当然希望能帮助你更好地理解这里的概念。 祝你剩下的考试好运!
for (int i = 1; i < list.length; i++) list[i] = list[i - 1];
这部分代码导致列表中所有项的值为1。
When i = 1, list[1] = list[0] = 1; when i = 2, list[2] = list[1] = 1; //not 2 because it is already overrided when i = 1.
....持续一个。
P / S:在提问之前,尝试逐步理解代码。
这都是因为这个循环,
for (int i = 1; i < list.length; i++) list[i] = list[i - 1];
发生了什么,你的第一个值是1
,按照循环它将该值赋给list
数组的相应第二个元素。
这意味着如果你的列表应该有10作为数组的第一个元素,就像这样
int list[] = {10, 2, 3, 4, 5, 6};
它将打印10,10,10,10,10,10
嗨,我将尝试解释此代码段中发生的情况
public class Test { public static void main(String[] args) { int list[] = {1, 2, 3, 4, 5, 6};
此行等效于以下代码
int list[] = new int[6]; list[0] = 1; list[1] = 2; list[2] = 3; list[3] = 4; list[4] = 5; list[5] = 6; for (int i = 1; i < list.length; i++) list[i] = list[i - 1];
此循环等效于以下代码
list[1] = list[0]; list[2] = list[1]; list[3] = list[2]; list[4] = list[3]; list[5] = list[4];
因为list[0] = 1
等同于以下内容
list[1] = 1; list[2] = 1; list[3] = 1; list[4] = 1; list[5] = 1; for (int i = 0; i < list.length; i++) System.out.print(list[i] + " "); } }
这就是为什么你得到你正在获得的输出
如果您不熟悉编程,打印调试可能是了解程序运行情况的一种非常好的方法。 我在你的程序中放了一堆打印语句,尝试运行它,看看你是否能理解结果:
public class Test { public static void main(String[] args) { int list[] = {1, 2, 3, 4, 5, 6}; for (int i = 1; i < list.length; i++) { System.out.println("\n\n\nloop number " + i); System.out.println("\ni = " + i); System.out.println("\nThe value at list[i] = " + list[i]); System.out.println("\ni - 1 = " + (i - 1)); System.out.println("\nSo I'm accessing element " + (i - 1) + " in the list for this iteration."); System.out.println("\nThe value at list[i - 1] = " + list[i - 1]); System.out.println("\nEnd of loop " + i); list[i] = list[i - 1]; } for (int i = 0; i < list.length; i++) System.out.print(list[i] + " "); } }
我通常不会使用那么多的简单循环,但我想告诉你在循环运行时访问值的不同方法。
对于控制台中循环的每次迭代,您将得到类似的内容,它会引导您完成值:
循环编号1
i = 1
列表中的值[i] = 2
i - 1 = 0
所以我正在访问此迭代列表中的元素0。
列表中的值[i - 1] = 1
循环结束1
看看我的答案:
为什么我没有得到我应该的输出?
无论如何……答案很简单……
在第一个循环中,打印您的数组,您将看到您的数组发生了什么
像这样的东西:
for (int i = 1; i < list.length; i++){ list[i] = list[i - 1]; System.out(list); }
正如有人发布的那样,你的for循环导致了这个结果(11111)。 您还提到了您的问题,例如“它将值存储到数组中?”。 为了最好地理解您的问题,就像您正在尝试从数组中获取值并将它们存储到另一个数组中。 如果是这样,这可能是其中一个选择。
public static void main(String []args){ int[] list = {1, 2, 3, 4, 5, 6}; int[] myList = new int[list.length]; for (int i=0; i
int list[] = {1, 2, 3, 4, 5, 6}; for (int i = 1; i < list.length; i++) { list[i] = list[i - 1]; }
当i为1时,指定list[1] = list[0]
,此处list [0]值为1
然后再次更新数组{1, 1, 3, 4, 5, 6}
当i为2时,指定list[2] = list[1]
,此处列表[1]的值为1
然后再次更新数组{1, 1, 1, 4, 5, 6}
这样,数组覆盖{1, 1, 1, 1, 1, 1}
1,1,1,1,1,1 {1, 1, 1, 1, 1, 1}