如何解决java.lang.ArrayIndexOutOfBoundsException异常?代码报错求助
Java数组索引越界异常分析与解决
报错原因
你遇到的java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0异常,本质是数组索引超出了数组的实际长度。
你的代码里,main方法的args参数是用来接收命令行启动参数的数组。当运行程序时没有传入任何参数,args就是一个长度为0的空数组,此时代码直接尝试访问args[0]和args[1],自然会触发索引越界异常。
除此之外,代码还存在两个潜在问题:
- 如果传入的参数不是整数,会触发
NumberFormatException - 如果第二个参数
b为0,执行除法和取余操作时会触发ArithmeticException
解决方法
方法1:运行时传入合法参数
编译代码后,在命令行启动时传入两个整数参数,格式如下:
javac IntOps.java java IntOps 12 4
这样args数组就会包含["12", "4"]两个元素,代码就能正常执行。
方法2:修改代码增加参数校验
为让程序更健壮,建议在代码中增加参数检查、异常捕获逻辑,处理各种非法输入场景:
public class IntOps { public static void main(String[] args) { // 检查参数数量 if (args.length < 2) { System.out.println("请传入两个整数参数,格式:java IntOps 整数1 整数2"); return; } int a, b; try { // 尝试将参数转为整数 a = Integer.parseInt(args[0]); b = Integer.parseInt(args[1]); } catch (NumberFormatException e) { System.out.println("参数必须是整数,请重新输入"); return; } // 检查除数是否为0 if (b == 0) { System.out.println("第二个参数不能为0,除数不能为0"); return; } int sum = a + b; int prod = a * b; int quot = a / b; int rem = a % b; System.out.println(a + " + " + b + " = " + sum); System.out.println(a + " * " + b + " = " + prod); System.out.println(a + " / " + b + " = " + quot); System.out.println(a + " % " + b + " = " + rem); System.out.println(a + " = " + quot + " * " + b + " + " + rem); } }
修改后的代码会在参数不合法时给出明确提示,避免直接抛出异常,提升了程序的可用性。
内容的提问来源于stack exchange,提问作者David Ladino
相关产品推荐
相关产品推荐

