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

CodeChef提交Java题报NoSuchElementException 本地STS运行正常

CodeChef提交Java代码触发运行时错误排查

问题现象

代码在本地STS工作区运行完全正常,提交到CodeChef平台后在读取输入环节抛出运行时异常退出。

错误堆栈

Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at Codeche.main(Main.java:13)

原提交代码

/* package codechef; // don't place package name! */

import java.util.*;

/* Name of the class has to be "Main" only if the class is public. */
class Codechef
{
    public static void main (String[] args)
    {
        Scanner in=new Scanner(System.in);
        String S;
        int A,B,C;
        S=in.nextLine();
        String arr[]=S.split(" ");
        A=Integer.parseInt(arr[0]);
        B=Integer.parseInt(arr[1]);
        C=Integer.parseInt(arr[2]);
        if(A>=1 && A<=10 && B>=1 && B<=10 && C>=1 && C<=10)
        {
            if(A==B || A==C || B==C)
                System.out.println("Yes");
            else
                System.out.println("No");
            in.close();
        }
    }
}

核心问题原因

  • 输入读取方式与平台格式不匹配:in.nextLine() 强依赖输入中的换行符作为行结束标记。本地STS是交互输入模式,手动输入后按回车会自动生成换行符,能被正常读取;但CodeChef判题环境是非交互模式,部分测试用例的输入流无结尾换行、或行分隔符格式和交互输入不一致,调用nextLine()时因找不到有效可读取行触发NoSuchElementException。
  • 类名不符合平台要求:CodeChef的Java判题规则要求,包含main方法的主类必须命名为Main,当前代码的类名是Codechef,容易造成类加载、输入流绑定的隐性异常。
  • 资源关闭逻辑不完整:原代码仅当三个输入值都落在1-10区间时才会关闭Scanner,其他分支下输入流未正常释放,部分平台环境下会触发读取异常。

适配平台的修改后代码

import java.util.*;

// 按照平台要求将主类命名为Main
class Main
{
    public static void main (String[] args)
    {
        Scanner in = new Scanner(System.in);
        // 直接按token读取数值,不依赖换行符匹配
        int A = in.nextInt();
        int B = in.nextInt();
        int C = in.nextInt();
        // 统一在流程结束后通过finally块关闭资源
        try {
            if(A>=1 && A<=10 && B>=1 && B<=10 && C>=1 && C<=10)
            {
                if(A==B || A==C || B==C)
                    System.out.println("Yes");
                else
                    System.out.println("No");
            }
        } finally {
            in.close();
        }
    }
}

说明:nextInt() 方法会自动按空白符(空格、换行、制表符)拆分读取输入的数值,不管测试用例的输入是单行空格分隔还是多行换行分隔,都能正确读取,不会触发换行符匹配的异常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 03:15:01