增强的For循环Java

时间:2018-04-25 15:05:50

标签: java arrays foreach

我正在尝试为以下整数数组编写for循环。数组的大小是10.我写了两个循环。第一个循环将增加值,第二个循环将打印结果,如元素1为10,元素2为20.但我一直得到0。我给了以前的代码,其中一切都很精细。出于测试原因,我想实现增强的for循环。但我坚持2个问题如何增加价值,我怎样才能定义arraylength。这是我的代码。

public static void main(String[] args) {

    int[] myIntArray = new int[10];

    for(Integer num: myIntArray){
        myIntArray[num]=num*10;
    }

    for(int num:myIntArray){
        System.out.println("Element " + num + ", value is " + myIntArray[num]);

    }
}

以前的代码

 int[] myIntArray =new int[10];

    for(int i =0; i<myIntArray.length;i++){
        myIntArray[i]=i*10;
    }
    for(int i=0;i<myIntArray.length;i++){
        System.out.println("Element " + i + ", value is " + myIntArray[i]);
    }

5 个答案:

答案 0 :(得分:3)

首先,您必须使用索引填充数组:

    Arrays.setAll(myIntArray, i -> i);

之后,在输出期间,您不应该尝试获取myIntArray[num]的值,因为使用增强的for循环您已经有了一个值,但是没有它的索引。 所以结果代码应该是这样的:

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

    Arrays.setAll(myIntArray, i -> i);

    for(Integer num: myIntArray){
        myIntArray[num]=num*10;
    }

    for(int num : myIntArray){
        System.out.println("Element " + num/10 + ", value is " + num);

    }
}

虽然我同意以前的评论者认为增强循环不是使用数组索引的正确选择。

答案 1 :(得分:2)

它们都返回零,因为在构造数组时,数组中每个int的默认值为零。然后你乘以10。哪个仍然会返回零。在使用for循环之前,需要填充数组。

编辑:

看到你的编辑后,我建议不要使用增强的for循环。在正确的情况下使用时,增强的for循环是一个很好的工具。它不会自动优于常规for循环,并且决定使用哪一个应该取决于具体情况。

答案 2 :(得分:2)

int[] myIntArray =new int[10];您正在实例化一个包含10个元素的数组,并且所有这些元素都是0。

这就是为什么在这里:

for(Integer num: myIntArray){
    myIntArray[num]=num*10;
}

你做的更像0 * 10,这是0.要纠正:

for(int i=0; i<myIntArray.length;i++){
    myIntArray[i]=i*10;
}

并显示:

for(int num:myIntArray) {
    System.out.println("Element " + num + ", value is " + num);
}

答案 3 :(得分:1)

这是简单的数学。 0 * 10 = 0;)

你的int数组没有被初始化,并且int原语的默认值是0.如果你想用基于索引的值预设它,你需要使用索引迭代数组或者在循环中添加一个。

int index=0;
for(Integer num: myIntArray){
    myIntArray[index]=(++index)*10;

}

for(int index=0;index<myIntArray.length;i++){
    myIntArray[i]=(i+1)*10;
}

答案 4 :(得分:0)

对于每个将隐藏索引变量,以防循环的对象是数组。如果循环的对象是迭代类型,则for each循环的实现隐藏迭代器。 因此,如果它是一个数组,并且在循环内部需要索引,那么最好使用带有数组索引的循环。

所以每个人写的都这样:

for(Integer num: myIntArray){
  myIntArray[num]=num*10;
}

类似于下面,在你的情况下:

for(int i =0; i<myIntArray.length;i++){
        myIntArray[i]=myIntArray[i]*10;
} 

并且不要使用数组中的值为每个中的索引,因为如果值恰好是&gt; =数组长度,它将抛出索引超出范围异常。这里没有,因为数组中的值是int类型,它们都被初始化为0,小于数组长度10。

for(int num:myIntArray){
    System.out.println("Element " + num + ", value is " + myIntArray[num]);
}