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

Java三维数组访问与计算问题求助,代码实现存疑

三维数组遍历与计算问题排查与修复

问题分析

1. 硬编码循环边界导致的遍历不完整与越界

  • 外层cst循环:初始化cst=1且无递增逻辑,加上末尾的break,仅会处理cst=1的情况,完全跳过了cst=2(第三个银行)的数据,这是你无法访问第三个数据的核心原因。
  • acc循环固定acc < 3,但opers[2](第三个银行)包含4个账户数组,硬编码3次循环会漏掉第4个账户;同时部分银行的账户数量不足3(比如opers[1]只有2个账户),循环3次会触发ArrayIndexOutOfBoundsException。
  • cash循环固定cash < 3,但很多账户的交易数组长度不足3(比如opers[0][1]只有{150,-300}两个元素),循环3次会直接抛出数组越界异常,导致程序崩溃,自然无法正确计算总和。

2. 逻辑冗余与不合理的循环结构

  • 中间的for(int i = 2; i < 3; i++)循环完全多余,它仅执行一次,目的只是输出bank[2],但三维数组opers的第一维度对应银行,应该直接用cst索引关联bank数组,不需要额外循环。

修复方案

核心原则:遍历数组时永远使用数组的length属性,而非硬编码数字,这样能适配不同长度的子数组,避免越界和遍历不完整。同时优化循环结构,去掉冗余代码。

修正后的代码

package arraysProgram;

public class P05 {
    public static void main(String[] args) {
        String[] bank = {"INFO", "ACCOUNT", "MONEY"};
        int total;

        int[][][] opers = {
                { {100, -50, 25}, {150,-300}, {300,-90,100} },
                { {90, -60, 250}, {300,20,-100} },
                { {20, 50}, {300}, {20,-20,40}, {100,-200} }
        };

        // 遍历每个银行(第一维度)
        for (int cst = 0; cst < opers.length; cst++) {
            System.out.println("BANK " + bank[cst] + ": ");
            // 遍历当前银行下的每个账户(第二维度)
            for (int acc = 0; acc < opers[cst].length; acc++) {
                System.out.println("Customer Account " + (acc + 1) + ": ");
                total = 0;
                // 遍历当前账户下的每笔交易(第三维度)
                for (int cash = 0; cash < opers[cst][acc].length; cash++) {
                    int amount = opers[cst][acc][cash];
                    System.out.print(amount + " ");
                    total += amount;
                }
                System.out.println("\nTotal Money: " + total + "\n");
            }
            System.out.println("------------------------");
        }
    }
}

修复说明

  • 用opers.length、opers[cst].length、opers[cst][acc].length分别作为三层循环的边界,确保遍历所有存在的元素,不会越界也不会遗漏。
  • 移除了冗余的i循环,直接通过cst索引对应bank数组,逻辑更清晰。
  • 将total的初始化移到账户循环内部,确保每个账户的总和计算独立,避免累加错误。
  • 调整循环起始索引为0(Java数组索引从0开始),确保第一个银行(INFO)的数据也能被遍历到;若你需求仅需从第二个银行开始,可将cst的初始值改为1。

验证结果

修正后的代码会正确遍历所有银行、账户和交易数据,准确计算每个账户的交易总和,同时不会出现数组越界问题,完全解决你遇到的无法访问数据、计算错误的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:55:15