为什么输出此代码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}