Java增强for循环无法正确获取nextInt输入值的问题咨询
增强for循环操作数组赋值出错的原因与解决方法
你遇到的问题核心是完全误解了增强for循环的工作逻辑,导致数组赋值时只覆盖了同一个位置,另一个位置始终是默认值。
问题根源
Java的增强for循环(For-Each Loop)是用来遍历数组/集合的元素值,而非获取数组索引。看你的代码:
for(int val : testArray) { testArray[val] = input.nextInt(); }
- 刚初始化的
int[] testArray默认所有元素都是0,第一次循环时,val取的是testArray[0]的值(也就是0),于是你给testArray[0]赋了第一个输入值; - 第二次循环时,
val取的是testArray[1]的值(还是默认的0),你又给testArray[0]赋了第二个输入值,直接覆盖了第一次的结果; - 整个过程中
testArray[1]从来没被赋值,始终是默认的0,所以最后打印出的是第二次输入的数和0。
正确写法
给数组逐个元素赋值,普通for循环是最直接合理的选择:
int[] testArray = new int[2]; Scanner input = new Scanner(System.in); // 通过索引遍历,逐个给数组元素赋值 for(int i = 0; i < testArray.length; i++) { testArray[i] = input.nextInt(); } for(int x = 0; x < testArray.length; ++x){ System.out.println(testArray[x]); }
如果非要用增强for循环(完全没必要,属于舍近求远),可以额外加计数器模拟索引:
int[] testArray = new int[2]; Scanner input = new Scanner(System.in); int index = 0; // 用增强for循环仅做遍历次数控制,靠计数器指定赋值索引 for(int ignored : testArray) { testArray[index++] = input.nextInt(); } for(int x = 0; x < testArray.length; ++x){ System.out.println(testArray[x]); }
内容的提问来源于stack exchange,提问作者Ken Kiarie
相关产品推荐
相关产品推荐

