java - 通过构造函数从用户获取输入时出现意外结果

标签 java arrays constructor

这是我的代码。对于任何类型的输入,我得到输出 0 0 0 0 0 0 0 0 0 0 我不明白为什么?

import java.util.*;
class TestArray{
    int[] a=new int[10];
    TestArray(){
        for(int ele:a){
            Scanner src=new Scanner(System.in);
            ele=src.nextInt();
        }
    }
}
class TestArrayLoop{
    public static void main(String[] args){
        TestArray a=new TestArray();
        for(int ele:a.a){
            System.out.print(ele+" ");
        }
    }
}

最佳答案

您误解了数组元素引用的工作原理。您不能使用 for-each 循环来更改数组中元素的值

在此代码中

for(int ele:a){
    Scanner src=new Scanner(System.in);
    ele=src.nextInt();
}

您正在声明一个新变量ele,它将设置为数组中的每个下一个值。当你这样做时

ele=src.nextInt();

您正在更改变量的值,而不是数组中的元素。使用普通索引 for 循环。并且不要在每次迭代时创建新的 Scanner 对象。

Scanner src=new Scanner(System.in);
for (int i = 0; i < a.length; i++) {
   a[i] = src.nextInt();
}

关于java - 通过构造函数从用户获取输入时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18934315/

相关文章:

java - Sonar java.lang.OutOfMemoryError : PermGen space

java - 在java中使用simpledateformat添加n天数

javascript - for..in 数组上的循环也会迭代原型(prototype)函数

java - 相机在未经相机许可的情况下工作

java - Intent.createChooser 安卓二维码阅读器

PHP:如何随机选择最大概率值?

c - 在C中的数组中迭代

java - 如何在 Java 中有条件地调用不同的构造函数?

java - 我们可以在 servlet 中创建一个非参数化构造函数吗?

c++ - 写入全局变量的顺序