2

为什么思考不起作用?它只是打印零。但是,当我使用索引值为“i”的普通 for 循环并在循环主体内使用“a[i]”时,它会起作用。

问题不在于打印循环,因为它不打印值,即使使用正常的 for 循环也是如此。

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

    Scanner s = new Scanner(System.in);
    int[] a = new int[5];
    for (int i : a)
    {
        System.out.println("Enter number : ");
        i=s.nextInt();

    }
    System.out.println("\nThe numbers you entered are : \n");
    for (int i : a)
    {
        System.out.println(i);
    }
}
}
4

5 回答 5

7

当您使用增强的 for 循环访问元素时:-

for (int i : a)
{
    System.out.println("Enter number : ");
    i=s.nextInt();

}

这里,int i是数组中元素的副本。修改它时,更改不会反映在数组中。这就是数组元素为 0 的原因。

因此,您需要使用传统的 for 循环进行迭代并访问其上的数组元素以为index其分配值。

即使您的数组是一些引用的数组,它仍然不起作用。这是因为,for-each 中的变量不是数组或集合引用的代理。For-each 将数组中的每个条目分配给循环中的变量。

所以,你的enhanced for-loop: -

for (Integer i: arr) {
    i = new Integer();
}

转换为: -

for (int i = 0; i < arr.length; i++) {
    Integer i = arr[i];
    i = new Integer();
}

所以,i循环中的初始化,并没有体现在数组中。因此数组元素是null

解决方法:-

  1. 使用传统的 for 循环:-

    for (int i = 0; i < a.length; i++) {
        a[i] = sc.nextInt();
    }
    
于 2012-11-06T13:47:53.007 回答
2

您的第一个 for 循环应该是“经典” for 循环:

for (int i = 0; i < a.length; i++) {
    a[i] = s.nextInt();
}
于 2012-11-06T13:48:14.707 回答
2

i=s.nextInt();

这是分配给局部变量i,而不是数组元素。本质上,

 for (int i : a) {
   //  body
 }

for (int index = 0; index < a.length; index++) {
    int i = a[index];
    // body
}

所以无论你分配什么i都不会影响数组。

于 2012-11-06T13:51:19.427 回答
1

该声明

i=s.nextInt()

问问自己:- 你在这里做什么?

您正在接受用户的输入。但是你在哪里存储它?在我里面?每次迭代都会覆盖它。也是i局部范围的 for 循环。所以它不存在于包含循环之外。

所以你会得到0... 0 ..0作为输出。

解决方案 :

for (int i=0;i<a.length;i++) {
a[i] = s.nextInt();
}

将用户输入的值存储在数组中。

于 2012-11-06T13:53:21.653 回答
-2

您应该存储从中获得的值s.nextInt();,这可以通过以下方式实现:

int j = 0;
for (int i : a){
      System.out.println("Enter number : ");
      a[j++]=s.nextInt();

}

这应该有效。

于 2012-11-06T13:47:23.283 回答