独立类数组传值及索引异常求助:仅最后一位索引值可保存
解决数组仅最后一个元素保存输入值的问题
嘿,这个问题我太熟了!之前写课程作业统计每周学习时长的时候,我也踩过一模一样的坑😅。你遇到的这种“除了最后一个元素,其他全是默认0”的情况,大概率是数组的赋值逻辑或者初始化位置出了问题,咱们一步步拆解原因和解决方案:
最常见的两个原因
1. 所有输入都被赋值到了同一个固定索引
你可能在循环处理输入的时候,不小心把所有值都塞到了最后一个索引的位置(比如周六对应的array[6]),而前面的索引根本没被赋值——数组默认初始化就是0,所以自然显示全0,只有最后一个位置保留了最后一次输入的值。
举个典型的错误例子:
int[] studyHours = new int[7]; Scanner scanner = new Scanner(System.in); // 错误:不管循环到第几次,都把值塞到索引6的位置 for (int i = 0; i < 7; i++) { System.out.print("输入学习时长:"); int hours = scanner.nextInt(); studyHours[6] = hours; // 所有输入都覆盖最后一个位置! }
2. 在循环内重复初始化数组
如果你把数组的创建语句放到了循环里面,那每次循环都会生成一个全新的数组——前6次循环的数组都会被丢弃,只有最后一次循环创建的数组会被保留,而这个数组里只有最后一个索引被赋值了,其他都是默认0。
错误示例:
Scanner scanner = new Scanner(System.in); int[] studyHours; // 错误:每次循环都新建数组,之前的输入全丢了 for (int i = 0; i < 7; i++) { studyHours = new int[7]; System.out.print("输入学习时长:"); studyHours[i] = scanner.nextInt(); }
对应的解决方案
1. 用循环变量作为索引赋值
把固定索引改成循环的计数器变量(比如i),这样每次循环都会把输入值放到对应天数的索引位置:
int[] studyHours = new int[7]; Scanner scanner = new Scanner(System.in); String[] days = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"}; for (int i = 0; i < 7; i++) { System.out.print("请输入" + days[i] + "的学习时长:"); int hours = scanner.nextInt(); studyHours[i] = hours; // 用循环变量i对应每一天的索引 }
2. 把数组初始化移到循环外面
确保数组只被创建一次,所有输入都存在同一个数组里:
// 正确:数组初始化在循环外,全程用同一个数组 int[] studyHours = new int[7]; Scanner scanner = new Scanner(System.in); for (int i = 0; i < 7; i++) { System.out.print("请输入学习时长:"); studyHours[i] = scanner.nextInt(); }
测试验证
修改完代码后,你可以加一段输出代码确认结果:
System.out.println("一周学习时长如下:"); for (int i = 0; i < 7; i++) { System.out.println(days[i] + ":" + studyHours[i]); }
这样就能看到每一天的输入值都被正确保存啦!
内容的提问来源于stack exchange,提问作者Michael M
相关产品推荐
相关产品推荐

