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

Java8求解Hackerrank30天代码挑战第6题 输出开头多余空行如何解决

问题根源

开头多余空行是Scanner读取逻辑+循环边界错误共同导致的:

  1. 调用scanner.nextInt()读取测试用例数量T时,只会读取整数值本身,不会消费输入中整数后面跟随的换行符
  2. 循环条件写为i <= T,比实际需要的执行次数多1次:第一次进入循环时调用scanner.nextLine(),刚好读到上一步未被消费的换行符,拿到空字符串,程序直接输出换行,就形成了开头的多余空行。
修复方案

两处问题同步调整即可:

  • 读取完T之后,额外调用一次scanner.nextLine(),消费掉整数后残留的换行符
  • 将循环条件从i <= T修改为i < T,保证循环只执行T次,匹配测试用例数量
  • 可按需合并奇偶长度字符串的重复拆分逻辑,简化代码
修复后可直接提交的代码
import java.util.*;

public class Solution {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        int T = scanner.nextInt();
        // 消费nextInt读取后残留的换行符
        scanner.nextLine();
        // 修正循环边界,仅执行T次匹配用例数
        for(int i = 0; i < T; i++){
            String SJ = scanner.nextLine();
            StringBuilder evenPos = new StringBuilder();
            StringBuilder oddPos = new StringBuilder();
            for(int k = 0; k < SJ.length(); k++){
                if(k % 2 == 0){
                    evenPos.append(SJ.charAt(k));
                } else {
                    oddPos.append(SJ.charAt(k));
                }
            }
            System.out.println(evenPos + " " + oddPos);
        }
        scanner.close();
    }
}
可选简化写法

如果不想额外加一行nextLine()消费换行,也可以直接用scanner.next()读取每个测试字符串,因为题目约定输入的测试字符串不含空格,next()方法会自动跳过包括换行在内的所有前置空白符,不会读到空串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:24:27