增强的For循环Java

增强的For循环Java,java,arrays,foreach,Java,Arrays,Foreach,我正在尝试为以下整数数组编写for循环。数组的大小是10。我写了两个循环。第一个循环将增加值,第二个循环将打印结果,如元素1为10,元素2为20。但我总是得到0。我给出了以前的代码,一切正常。出于测试原因,我想实现增强的For循环。但我遇到了两个问题:如何增加值以及如何定义arraylength。这是我的密码 public static void main(String[] args) { int[] myIntArray = new int[10]; for(Integer

我正在尝试为以下整数数组编写for循环。数组的大小是10。我写了两个循环。第一个循环将增加值,第二个循环将打印结果,如元素1为10,元素2为20。但我总是得到0。我给出了以前的代码,一切正常。出于测试原因,我想实现增强的For循环。但我遇到了两个问题:如何增加值以及如何定义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]);
    }
int[]myIntArray=newint[10];

对于(inti=0;i这是简单的数学。0*10=0;)

您的int数组未初始化,int原语的默认值为0。如果要使用基于索引的值对其进行预设,则需要使用索引对数组进行迭代,或将索引添加到循环中

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

}


for(int index=0;index这是简单的数学。0*10=0;)

您的int数组未初始化,int原语的默认值为0。如果要使用基于索引的值对其进行预设,则需要使用索引对数组进行迭代,或将索引添加到循环中

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

}


for(int index=0;index它们都返回零,因为在构造数组时,数组中每个int的默认值都是零。然后将其乘以10。该值仍将返回为零。在使用for循环之前,需要填充数组

编辑:


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

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

编辑:


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

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;
}

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;
}

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

    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);

    }
}

尽管我同意前面的评论,增强循环不是使用数组索引的正确选择。

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

    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);

    }
}

尽管我同意前面的评论,增强循环不是处理数组索引的正确选择。

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

因此,以这种方式书写的每一项:

for(Integer num: myIntArray){
  myIntArray[num]=num*10;
}
在您的情况下,与以下类似:

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

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

因此,以这种方式书写的每一项:

for(Integer num: myIntArray){
  myIntArray[num]=num*10;
}
在您的情况下,与以下类似:

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

num*10
你没有问任何问题
num*10
总是
0
,因为这是
int
s的默认值。你没有在数组中放入任何元素,所以每个元素在初始化时都是
0
int
的默认值是0。你用任何东西乘以0,它会返回0,因为它是称为“增强型”这并不意味着它对一切都有好处。你的需求显然更好,只要使用一个正常的for循环和一个交互计数器变量,就可以了。
num*10
你没有问任何问题
num*10
总是
0
,因为这是
int
s的默认值。你没有放任何元素数组中的元素,因此每个元素都是
0
初始化时
int
的默认值是0。将0与任何值相乘,它将返回0,因为它被称为“增强型”这并不意味着它对所有事情都有好处。你的需求显然更好,只要使用一个正常的for循环和一个交互计数器变量,就可以了。我不知道为什么我会在这里得到向下的投票。开个玩笑?这是一个可行的答案第一种情况:num从不递增,第二种情况:num从不设置也不递增。可能是什么是的!谢谢:)一个解释是正确的,是我的错。我仍然认为我不应该一言不发地投下5票。(无论如何;)以下编辑:两种情况下都没有设置1rst元素,两种情况下都会抛出ArrayoutOfBoundException我不知道为什么会在这里得到向下投票。开玩笑?这是一个可行的答案第一种情况:num从未递增,第二种情况:num从未设置或递增。可能是你情绪低落的原因那是c