Java数组问题

时间:2014-08-22 14:17:20

标签: java arrays

所以这只是一个基本问题。我正在使用Java中的数组,弄清楚我需要为我的小任务做些什么。我决定玩数组,看看如果打印出我的数组会发生什么。我对这段代码的结果非常困惑:

public class array_output{
    public static void main(String[] args){
       int[] anArray = new int[10];
       for(int p = 0; p < 10; p++){
           anArray[p] = p;
           //System.out.print(anArray[p] + " ");
           p++;
       }
       System.out.println (java.util.Arrays.toString(anArray));
    }
}

所以最初的意图是制作一个数组“0,2,4,6,8”。我决定将我的System.out.print放在for循环之外并将其打印出来。我得到的输出是

[0, 0, 2, 0, 4, 0, 6, 0, 8, 0]

实际上,当我写这篇文章的时候,我认为它是在0到9之间放置一个“0”来代替0是假的,如果数字显示它在数组中,不确定。

如果有人能向我解释这是发生在这里的事情,也许可以解释如何在for循环之外打印数组的值,我会非常感激

6 个答案:

答案 0 :(得分:4)

您在每次迭代时递增p两次:

for(int p = 0; p < 10; p++) { // here
    anArray[p] = p;
    p++; // and here
}

从循环体中删除p++

如果你想让数组包含0,2,4,6 ......,那么循环的主体应该是

anArray[p] = p * 2;

即。初始化数组的每个元素,其位置乘以2。

答案 1 :(得分:1)

您在p循环的每次迭代中递增for两次 因此,只分配数组(0,2,4,6,8)的偶数索引。

for(int p=0; p<10; p++){ // <-- first time here
    anArray[p]=p;
    //System.out.print(anArray[p] + " ");
    p++; // <-- second time here
}

如果您删除其中一个(更有意义删除第二个p++),它将按预期工作。

顺便说一句,如果目标是仅为数组指定偶数值,则应指定2*p

for(int p=0; p<10; p++){
    anArray[p]=2*p;
}

答案 2 :(得分:0)

您的问题是,您将循环变量p增加两次:常规for循环中的一次和for循环结束时的第二次 - 因此您的索引会跳过每两步并跳过数组元素根本没有填充。

解决方案是正常迭代,但将index * 2放在当前数组位置:

public class array_output{
        public static void main(String []args){
        int[] anArray = new int[10];

        for(int p=0; p<10; p++){
            anArray[p]=p * 2;
        }

        System.out.println (java.util.Arrays.toString(anArray));
    }
}

答案 3 :(得分:0)

我建议您查看Java language specification

引用:

  

数组组件是未命名的变量,只要创建了一个新的数组对象(第10节,第15.10节),就会创建并初始化为默认值(第4.12.5节)。当不再引用数组时,数组组件有效地停止存在。

在您使用int的情况下,默认情况下会将其初始化为0。

这就是你得到的原因:[0,0,2,0,4,0,6,0,8,0] 由于“缺失”值实际上没有从其默认值更改。 2 4 6 8是因为你增加了p两次,但我不确定这是否是设计的,或者这是一个错误,因为你的初始问题似乎表明了前者。

如果你只想要它包含:0 2 4 6 8 您可以使用以下代码:

public class array_output{
    public static void main(String[] args){
       int[] anArray = new int[5];
       for(int p = 0; p < 5; p++){
           anArray[p] = p * 2;
       }
       System.out.println (java.util.Arrays.toString(anArray));
    }
}

如果只希望它包含5个元素,则没有理由将数组初始化为10。

答案 4 :(得分:0)

当您声明数组时,没有什么可担心的:

int[] anArray = new int[10];

它已被启动&#39; 0&#39;在所有索引中从0到9开始;

当你插入值时,它插入:

anArray[0]=0;
anArray[2]=2;
anArray[4]=4;
anArray[6]=6;
anArray[8]=8;

并且因为在所有其他索引值已经是&#39; 0&#39;。 因此,如果您打印数组,它将打印如下:

[0, 0, 2, 0, 4, 0, 6, 0, 8, 0]

如果要打印数组,只需运行for循环并打印为:

for(int i=0;i<10;i++)
  System.out.println(anArray[i]);

答案 5 :(得分:0)

默认情况下,int数据类型初始化为值0.因为你递增p两次(在for循环中一次,在循环体中一次),只有具有偶数索引的元素才会使其值发生变化

所以在第一次迭代中你得到aArray [0] = 0.然后你增加p两次,所以在第二次迭代中p等于2你做aAray [2] = 2,而跳过anArray [1]。