所以这只是一个基本问题。我正在使用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循环之外打印数组的值,我会非常感激
答案 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]。