数组插入元素Java代码报错排查及Java错误码查询咨询
问题分析与解决方案
一、你的代码问题排查
1. NoSuchElementException 触发原因
你的输入读取逻辑要求依次输入:
- 整数
N N+2个整数填充数组- 整数
X和Y
如果实际输入的数字总数少于上述要求,Scanner调用nextInt()时找不到下一个整数,就会抛出该异常。比如N=3时,需要输入1+5+2=8个数字,少一个都会触发错误。
2. 数组越界隐患
Java数组索引从0开始,你声明的数组int A[] = new int[N + 2];最大有效索引是N+1,但循环从i=1跑到i=N+2,执行A[j + 1] = A[j]时,当j=N+2,索引会变成N+3,直接超出数组范围,后续会抛出ArrayIndexOutOfBoundsException。
3. 插入逻辑完全错误
- 未将待插入元素
Y放入数组; - 右移元素方向错误:从左往右移会覆盖前置元素,应该从数组末尾往前移,才能保留所有需要右移的内容;
- 外层循环遍历数组找
i==X完全冗余,直接判断X有效性后执行插入逻辑即可。
修正后的代码
import java.util.Scanner; public class Main { // Java类名遵循大驼峰规范 public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[] A = new int[N + 1]; // 初始数组长度N,插入后变为N+1 // 用0索引读取初始N个元素,符合Java数组习惯 for (int i = 0; i < N; i++) { A[i] = sc.nextInt(); } int X = sc.nextInt() - 1; // 若用户输入的是1-based索引,转成Java的0-based int Y = sc.nextInt(); // 校验插入索引的有效性 if (X < 0 || X > N) { System.out.println("插入索引超出范围"); sc.close(); return; } // 从后往前右移元素,避免覆盖 for (int j = N; j > X; j--) { A[j] = A[j - 1]; } // 插入目标元素Y A[X] = Y; // 打印结果 for (int num : A) { System.out.print(num + " "); } sc.close(); } }
二、查询带代码行号的Java错误说明的方法
- 直接查看JDK源码:JDK安装目录里有
src.zip文件,解压后找到对应类(比如java/util/Scanner.java),定位到错误提示的行号(如937),查看代码上下文和注释,就能明白异常触发的具体条件。 - IDE跳转查看:在IntelliJ IDEA、Eclipse等IDE中,控制台调用栈里的
Scanner.java:937是可点击的链接,直接跳转就能看到源码行,结合代码逻辑理解错误原因。 - JDK官方文档:搜索对应异常类(比如
NoSuchElementException)的官方文档,文档会说明异常触发场景,再结合源码行号的具体代码,就能精准定位问题。
内容的提问来源于stack exchange,提问作者Earth
相关产品推荐
相关产品推荐

