Java冰雹序列程序输出格式问题求助:无法通过校验
解决冰雹序列输出格式问题
问题根源分析
你的代码存在两个核心格式问题:
- 每个数字后都强制追加制表符
\t,包括序列的最后一个元素1,导致末尾出现多余空白字符。 - 换行逻辑时机错误,且循环结束后未确保最后一行末尾有换行,不符合题目输出要求。
解决思路
- 避免末尾多余制表符:不要在每个数字后直接拼接
\t,而是判断当前数字是否为该行的第一个元素——若非行首,先输出\t再输出数字;或者收集每行元素后用制表符连接输出整行。 - 调整换行时机:每输出10个数字后立即换行,确保每行恰好10个元素(最后一行除外)。
- 保证末尾换行:循环结束后强制输出换行,确保输出内容的完整性。
修改后的代码
import java.util.Scanner; public class HailstoneSequence { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); int n = scnr.nextInt(); scnr.close(); int count = 0; while (true) { // 非行首且未到该行第10个元素时,先输出制表符 if (count > 0 && count % 10 != 0) { System.out.print("\t"); } // 输出当前冰雹数 System.out.print(n); count++; // 到达1时终止循环 if (n == 1) { break; } // 生成下一个冰雹数 n = n % 2 == 0 ? n / 2 : 3 * n + 1; // 每输出10个数字换行 if (count % 10 == 0) { System.out.println(); } } // 确保最后一行末尾有换行 System.out.println(); } }
关键改动说明
- 补充了Java程序必需的类定义(原代码缺失类包裹,无法编译运行)。
- 调整输出逻辑:先判断是否需要输出制表符,再输出数字,彻底避免末尾多余空白。
- 使用
println()实现换行,比print("\n")更符合Java编码规范。 - 循环结束后强制输出换行,保证输出格式与示例一致。
- 关闭Scanner资源,避免不必要的资源泄漏。
内容的提问来源于stack exchange,提问作者TonyK
相关产品推荐
相关产品推荐

