Java8求解Hackerrank30天代码挑战第6题 输出开头多余空行如何解决
问题根源
开头多余空行是Scanner读取逻辑+循环边界错误共同导致的:
- 调用
scanner.nextInt()读取测试用例数量T时,只会读取整数值本身,不会消费输入中整数后面跟随的换行符 - 循环条件写为
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
相关产品推荐
相关产品推荐

