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(); } }
关键修复点
- 先声明数组
double[] numbers;,不立即初始化 - 在
readNumbers方法中,获取用户输入的n后,再创建对应长度的数组numbers = new double[n]; - 补充了原代码中未实现的
calculate和display方法,避免运行时出现未定义方法的错误
内容的提问来源于stack exchange,提问作者Nanika
相关产品推荐
相关产品推荐

