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

Java编译错误:Exception in thread "main" java.util.NoSuchElementException含义及求助

问题原因

你遇到的NoSuchElementException是因为文件格式和读取逻辑不匹配:

  • 你的Blinker.txt中,除第一行的5 5用空格分隔外,后续每行是连续的数字字符(如00000、01110)。
  • 代码里使用scan2.nextInt()读取每个单元格的值,但Scanner的nextInt()会将连续的数字视为一个完整整数(比如把00000当成单个整数0,01110当成单个整数1110),导致实际能读取的整数数量远少于fileRow * fileColumn(仅5个,而非25个),当循环尝试读取更多整数时,就会抛出异常。
解决方案

不需要修改文件,直接调整读取逻辑,改为读取每行字符串后逐个解析字符:

修改后的readGrid方法代码:

public static int[][] readGrid(String fileName) throws IOException{
    File file = new File(fileName);
    Scanner scan2 = new Scanner(file);

    // 读取行列数
    fileRow = scan2.nextInt();  
    fileColumn = scan2.nextInt(); 
    // 跳过行列数所在行的剩余换行符,避免后续nextLine读到空串
    scan2.nextLine();
    
    array = new int[fileRow][fileColumn];

    for(int i = 0; i < fileRow; i++){
        // 读取整行并去除首尾空白(防止行尾有多余空格)
        String line = scan2.nextLine().trim();
        // 可选:检查行长度是否符合列数,避免格式错误
        if(line.length() != fileColumn){
            throw new IOException("第" + (i+1) + "行格式错误,长度应为" + fileColumn);
        }
        for(int j = 0; j < fileColumn; j++){
            // 将字符转换为对应整数('0'的ASCII码减去自身得到0,以此类推)
            array[i][j] = line.charAt(j) - '0';
        }
    }
    
    scan2.close(); // 关闭Scanner释放资源
    return array;
}
补充说明

你之前尝试的hasNextInt()无效,是因为hasNextInt()只会判断下一个输入是否为整数,而文件中后续的00000等字符串确实会被识别为整数,所以它会返回true,但每次读取都会消耗整行的连续数字,无法满足循环需要的25个整数,最终还是会抛出异常。

内容的提问来源于stack exchange,提问作者Boncappuccino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:21:37