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

Java代码触发Out of bounds for length Exception问题求助

解决Java年龄统计代码的「Out of bounds for length」异常

核心问题排查

「Out of bounds for length」本质是数组索引超出了有效范围——Java数组索引从0开始,最大有效索引为数组长度-1,常见触发场景:

  • 预先定义了固定长度的数组,但输入的年龄数量超过数组长度;或是循环时用了<= ages.length这类错误条件,导致访问了不存在的索引。
  • 输入处理逻辑未控制读取次数,比如用Scanner时无限读取,往固定数组里塞入了超出容量的元素。

针对性修复方案

方案1:用动态集合替代固定数组(推荐)

固定数组长度不可变,用ArrayList可动态添加元素,彻底规避越界问题:

import java.util.ArrayList;
import java.util.Scanner;

public class CalculoEdades {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        ArrayList<Integer> edades = new ArrayList<>();

        System.out.println("Ingresa las edades (escribe un carácter no numérico para finalizar):");
        // 持续读取直到输入非整数
        while (entrada.hasNextInt()) {
            edades.add(entrada.nextInt());
        }

        if (edades.isEmpty()) {
            System.out.println("No se ingresaron edades válidas.");
            entrada.close();
            return;
        }

        int maxEdad = edades.get(0);
        int minEdad = edades.get(0);

        for (int edad : edades) {
            if (edad > maxEdad) maxEdad = edad;
            if (edad < minEdad) minEdad = edad;
        }

        System.out.println("Edad máxima: " + maxEdad);
        System.out.println("Edad mínima: " + minEdad);
        entrada.close();
    }
}

方案2:先获取输入数量再初始化数组

若坚持用固定数组,必须先让用户输入要录入的年龄总数,再据此初始化数组:

import java.util.Scanner;

public class CalculoEdades {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);

        System.out.println("¿Cuántas edades vas a ingresar?");
        int cantidad = entrada.nextInt();
        int[] edades = new int[cantidad];

        // 循环读取指定数量的年龄
        for (int i = 0; i < cantidad; i++) {
            System.out.println("Ingresa la edad " + (i+1) + ":");
            edades[i] = entrada.nextInt();
        }

        int maxEdad = edades[0];
        int minEdad = edades[0];

        for (int edad : edades) {
            if (edad > maxEdad) maxEdad = edad;
            if (edad < minEdad) minEdad = edad;
        }

        System.out.println("Edad máxima: " + maxEdad);
        System.out.println("Edad mínima: " + minEdad);
        entrada.close();
    }
}

关键注意点

  • 数组循环的终止条件永远用i < 数组长度,避免<=导致的越界。
  • 处理输入时必须确保元素数量不超过数组容量,或直接用动态集合完全规避长度限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:15:34