You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

独立类数组传值及索引异常求助:仅最后一位索引值可保存

解决数组仅最后一个元素保存输入值的问题

嘿,这个问题我太熟了!之前写课程作业统计每周学习时长的时候,我也踩过一模一样的坑😅。你遇到的这种“除了最后一个元素,其他全是默认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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:46:46