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

如何修复Hackerrank Day6代码中的java.util.NoSuchElementException错误

解决Java Scanner的NoSuchElementException问题(Hackerrank Day6挑战)

嘿,我来帮你搞定这个报错!你遇到的Exception in thread "main" java.util.NoSuchElementException问题,根源出在循环次数和输入读取的小细节上,咱们一步步拆解:

错误原因分析

  1. 循环次数多了一次:
    你用sc.nextInt()读取了测试用例数量T,但循环条件写的是for(int i=0; i<=T; i++)——这会让循环执行T+1次!比如你输入T=2,本来只需要处理2个字符串,结果循环会尝试读取3个,最后一次没有输入可读取,就抛出了这个异常。
  2. 输入流残留的换行符问题:
    sc.nextInt()只会读取数字,不会读取数字后面的换行符,后续的sc.next()可能会意外读取到空内容(虽然这不是这次报错的主因,但也是常见的坑)。

修改后的代码

我调整了循环条件,优化了输入读取方式,还把零散的输出改成了更高效的StringBuilder拼接:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int T = sc.nextInt();
    sc.nextLine(); // 吃掉nextInt()留下的换行符,避免影响后续字符串读取
    
    // 循环条件改成i < T,确保只执行T次
    for(int i=0; i<T; i++){
        String S = sc.nextLine(); // 用nextLine()读取整行,适配Hackerrank的单行字符串输入
        StringBuilder evenChars = new StringBuilder();
        StringBuilder oddChars = new StringBuilder();
        
        for(int j=0; j<S.length(); j++){
            if(j%2 == 0){
                evenChars.append(S.charAt(j));
            } else {
                oddChars.append(S.charAt(j));
            }
        }
        // 一次性输出结果,更简洁高效
        System.out.println(evenChars + " " + oddChars);
    }
    sc.close(); // 记得关闭Scanner资源
}

关键修改点说明

  • 把循环条件从i<=T改为i<T,严格匹配测试用例的数量;
  • 添加sc.nextLine()处理nextInt()残留的换行符,避免后续读取字符串时出现异常;
  • 用sc.nextLine()代替sc.next():Hackerrank的测试用例中每个字符串是单独一行,nextLine()能完整读取整行内容,而next()会在遇到空格时停止,更符合题目要求;
  • 使用StringBuilder拼接字符后一次性输出,比多次调用System.out.print效率更高,代码也更整洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:44:29