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

数组插入元素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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 00:33:29