Java跨类调用方法向账单数组添加参数运行报错如何修复
以下是该类崩溃的高频故障点及对应修复方案:
1. 数组下标越界(占比最高)
该异常触发场景通常为两种:
- 账单数组初始化长度小于5,或未初始化数组直接插入
addBill方法内的插入计数逻辑错误,第一次插入就用到了超出数组长度的下标
修复代码示例:
// billBook类内部正确实现 public class BillBook { // 初始化长度不小于5的账单数组 private Bill[] bills = new Bill[5]; // 插入计数初始值设为0 private int insertCount = 0; public boolean addBill(Bill bill) { // 先判断数组是否已满,避免越界 if (insertCount >= bills.length) { return false; } bills[insertCount] = bill; insertCount++; return true; } }
2. 输入流操作异常
如果驱动类中使用Scanner做输入,单轮输入结束后误调用了scanner.close(),第二次触发输入时会直接抛出NoSuchElementException崩溃。
修复方式:所有输入操作全部完成后再关闭输入流,不要嵌套在循环输入的逻辑内部关闭Scanner。
3. 空指针异常
触发场景通常为:
- billBook类只声明了账单数组变量,没有实际初始化数组对象(仅写了
private Bill[] bills;没有new操作) - Bill类构造方法内部调用了未初始化的引用类型对象的方法/属性
修复方式:所有引用类型变量使用前必须完成初始化,Bill类构造方法执行时确保所有依赖的对象都已经实例化。
4. 输入类型不匹配异常
如果接收输入的变量类型和用户实际输入的内容类型不一致,比如用scanner.nextInt()接收了字符串输入,会触发InputMismatchException崩溃。
修复方式:增加输入类型校验逻辑,示例如下:
Scanner sc = new Scanner(System.in); // 接收数字前先校验输入类型 if (sc.hasNextInt()) { int amount = sc.nextInt(); } else { System.out.println("输入格式错误,请输入数字"); sc.next(); // 清空错误输入缓存,避免死循环 }
如果以上方案无法解决问题,可以补充打印的异常栈信息和对应代码片段进一步定位。
内容的提问来源于stack exchange,提问作者Tareq El-Sayyed
相关产品推荐
相关产品推荐

