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

Java中用户输入填充数组时抛出ArrayIndexOutOfBoundsException求助

数组越界异常问题解决

问题描述

我尝试创建一个指定长度的数组,通过用户输入填充数字,但在输入第一个数字后就抛出了异常错误。

原代码

import java.util.Scanner;

public class t4NumericalOperations {
    Scanner input = new Scanner(System.in);
    int n;
    double[] numbers = new double[n];

    public void readNumbers(){
        System.out.println("How many numbers do you want to do caculations on? ");
        n = input.nextInt();
        System.out.println("Enter your numbers : ");
        for(int i=0;i<n;i++){
            numbers[i] = input.nextDouble();
        }
    }
}

class testSum{

    public static void main(String[] args) {
        t4NumericalOperations col1 = new t4NumericalOperations();
        col1.readNumbers();
        col1.calculate();
        col1.display();
    }
}

错误输出

How many numbers do you want to do caculations on? 
2
Enter your numbers : 
1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
        at exercises1.ch4.t4NumericalOperations.readNumbers(t4NumericalOperations.java:15)
        at exercises1.ch4.testSum.main(t4NumericalOperations.java:36)

问题原因

核心问题是数组初始化时机错误:

  • 类成员变量n在类实例化时默认初始化为0,因此double[] numbers = new double[n];创建了一个长度为0的空数组。
  • 后续在readNumbers方法中给n赋值为用户输入的数值,但已经创建的数组长度不会自动更新,当尝试访问numbers[0]时,就触发了数组越界异常(长度为0的数组没有任何索引)。

修复方案

将数组的初始化操作移到获取用户输入的n之后,确保数组长度与用户指定的一致:

import java.util.Scanner;

public class t4NumericalOperations {
    Scanner input = new Scanner(System.in);
    int n;
    double[] numbers; // 仅声明数组变量,暂不初始化

    public void readNumbers(){
        System.out.println("How many numbers do you want to do caculations on? ");
        n = input.nextInt();
        numbers = new double[n]; // 获取用户指定的长度后再初始化数组
        System.out.println("Enter your numbers : ");
        for(int i=0;i<n;i++){
            numbers[i] = input.nextDouble();
        }
    }

    // 补充原代码中缺失的calculate方法(示例逻辑:计算总和)
    public void calculate() {
        double total = 0;
        for(double num : numbers) {
            total += num;
        }
        System.out.println("计算结果:总和为 " + total);
    }

    // 补充原代码中缺失的display方法(示例逻辑:打印所有输入的数字)
    public void display() {
        System.out.print("输入的数字:");
        for(double num : numbers) {
            System.out.print(num + " ");
        }
    }
}

class testSum{

    public static void main(String[] args) {
        t4NumericalOperations col1 = new t4NumericalOperations();
        col1.readNumbers();
        col1.calculate();
        col1.display();
    }
}

关键修复点

  1. 先声明数组double[] numbers;,不立即初始化
  2. 在readNumbers方法中,获取用户输入的n后,再创建对应长度的数组numbers = new double[n];
  3. 补充了原代码中未实现的calculate和display方法,避免运行时出现未定义方法的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:56:03