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

为何数组总是索引越界?二维数组平均值计算报错排查

问题分析与修复

索引越界的直接原因

你代码最后一行的ave[r]/=(R*C)会触发数组索引越界异常,因为前面的for(r=0; r<R; r++)循环结束后,变量r的值等于R(也就是4),而ave数组的长度是4,合法索引范围是0-3,访问ave[4]自然会报错。

逻辑错误梳理

你原本想计算所有元素的平均值,但当前代码里的ave数组逻辑完全错误:

  • 输入循环里ave[r]+=sum[r]是在每个generator的每个输入项都累加一次该generator的当前总和,这会导致ave[r]的值远大于实际的全局总和。
  • 用一维数组ave来存全局平均值完全没必要,全局平均值是一个单一数值,用一个变量即可。

修复后的代码

import java.util.Scanner;

public class Arrays2D_GeneratorRevised {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        final int R=4, C=3;
        int r,c;
        double[][] volt = new double[R][C];
        double[] sum = new double[R];
        double totalSum = 0; // 用单个变量存所有元素的总和
        System.out.println("Enter the output voltages for the following generators :");
        for(r=0; r<R; r++) {
            System.out.print("Generator "+(r+1)+" :\n");
            for(c=0; c<C; c++) {
                volt[r][c] = in.nextDouble(); // 改用nextDouble()匹配double类型
                sum[r] += volt[r][c];
                totalSum += volt[r][c]; // 累加全局总和
            }
        }
        //display table
        System.out.print("\n\t           Generator Test Results");
        System.out.printf("\n\t%16s%10s%9s%10s","Output 1","Output 2","Output 3","Average");
        for(r=0; r<R; r++) {
            System.out.print("\nGenerator "+(r+1));
            for(c=0; c<C; c++) {
                System.out.printf("%10.2f",volt[r][c]);
            }
            System.out.printf("%10.2f",sum[r]/C); // 输出每个generator的平均值
        }
        // 输出所有元素的全局平均值,放在表格最后一行
        System.out.print("\n\tAll Generators");
        System.out.printf("%30.2f", totalSum/(R*C));
        System.out.print("\n\n");
        in.close(); // 关闭Scanner资源
    }
}

关键修改点

  • 移除了多余的ave数组,改用totalSum变量存储所有元素的总和,逻辑更清晰。
  • 输入时改用nextDouble()读取数值,避免int转double的潜在问题。
  • 全局平均值的输出调整到表格最后一行,格式更合理,同时避免了索引越界问题。
  • 添加了in.close()关闭Scanner,规范资源管理。

内容的提问来源于stack exchange,提问作者Johann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:31:07