为什么输出此代码为111111?

时间:2016-04-06 04:39:52

标签: java arrays

这是代码。我试图解决它,但我无法理解它的输出是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] + " ");
      }
    }

9 个答案:

答案 0 :(得分:1)

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 1 1,因为第一个for语句循环遍历一个名为list的数组(即{1, 2, 3, 4, 5, 6})并用前一个替换每个一,从第二个开始(索引1;或者,如某些人所说,第一个“真正的”第一个是第0个......我离题了)。因此第二个(索引1)项目的当前值(2)被第一个(索引0)项目的值替换,即1 :( {{1} } list[i] = list[i - 1];)。这继续沿着整数数组向下,直到我们到达i = 1的末尾。当我们用前面的值替换每个值时,它们最终都会变成相同的值 - 数组中第一个项的值,即list。最后,我们为1list提供此值。

下一个{1, 1, 1, 1, 1, 1}语句只会打印出更新后的for的每个值,然后是空格:list。因此,正如您所看到的,运行此代码的结果是打印出System.out.print(list[i] + " ");

只是为了以更直观的方式驱动点回家,让我们只绘制1 1 1 1 1 1数组随时间变化的值:

list

我当然希望能帮助您更好地理解这里的概念。祝你好好参加其他考试!

答案 2 :(得分:0)

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:在提问之前,尝试逐步理解代码。

答案 3 :(得分:0)

这都是因为这个循环,

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

答案 4 :(得分:0)

您好我会尝试解释此代码段中发生的事情

    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] + " "); } } 等同于以下

   isSelected()

这就是你获得输出的原因

答案 5 :(得分:0)

如果您不熟悉编程,打印调试可能是了解程序运行情况的绝佳方式。我已经在你的程序中添加了一堆打印语句,尝试运行它,看看你是否能理解结果:

var text = "asd^dfdf^dsfgdsfg^zdfsd^sdfsdf^dfsdf^dsfsdf^dfsdf^dfsf^sdfsdf",
    temp = text.split('^');
for (i = 0; i < temp.length; i += 5) {
  passfun(temp.slice(i, 5 + i).join('^') + ( i + 5 < temp.length ? '^' : ''));
}

我通常不会将这么多用于简单的循环,但我想在循环运行时向您展示访问值的不同方法。

对于控制台中循环的每次迭代,您将得到类似的内容,它会引导您完成值:

  

循环编号1

     

i = 1

     

list [i] = 2

的值      

i - 1 = 0

     

所以我在这个迭代的列表中访问元素0。

     

列表中的值[i - 1] = 1

     

循环结束1

答案 6 :(得分:0)

在这里看看我的答案:
Why am I not getting the output I am supposed to be?

无论如何......答案很简单......
在第一个循环中,打印您的阵列,您将看到阵列发生了什么事 像这样的东西:

for (int i = 1; i < list.length; i++){
          list[i] = list[i - 1];
          System.out(list);
}

答案 7 :(得分:0)

正如有人发布的那样,你的for循环导致了这个结果(11111)。你还提到你的问题就像&#34;它将值存储到一个数组中?&#34;。为了最好地理解你的问题,就像你试图从数组中获取值并将它们存储到另一个数组中一样。如果是这样,这可能是其中一个选择。

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<list.length; i++){
            myList[i] = list[i];
        }
        for (int i = 0; i < list.length; i++)
          System.out.print(myList[i] + " ");
     }

答案 8 :(得分:0)

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],此处列表[0]值为1

然后数组更新{1, 1, 3, 4, 5, 6},再次循环

当我为2时,您指定list[2] = list[1],此处列表[1]值为1

然后数组更新{1, 1, 1, 4, 5, 6},再次循环

这样,数组就会覆盖{1, 1, 1, 1, 1, 1}