Java游程编码实现:数字频次按nxw.格式输出问题
修正你的行程编码Java代码
我发现你的代码目前只输出了最后一组连续数字的统计结果,而且初始值的处理也有问题,没法正确处理所有输入情况。咱们一步步来修正:
原代码的核心问题
- 仅在循环结束后输出一次结果,中间遇到不同数字时没有输出之前统计好的连续组,导致丢失了前面所有的结果
- 初始
oldNum = 0的设定不合理,如果输入的第一个数字不是0,会触发错误的分支逻辑 - 对
first标记的处理逻辑混乱,没有正确初始化第一组数字的统计
修正后的代码
import java.util.Scanner; public class LaufLaengenKodierung { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 先判断是否有输入,避免空输入导致错误 if (!sc.hasNextInt()) { sc.close(); return; } int freq = 1; int oldNum = sc.nextInt(); int currentNum; while (sc.hasNextInt()) { currentNum = sc.nextInt(); if (currentNum == oldNum) { // 连续相同数字,频次加1 freq++; } else { // 遇到不同数字,先输出之前的组 System.out.print(freq + "x" + oldNum + "."); // 重置统计当前新数字 freq = 1; oldNum = currentNum; } } // 循环结束后,输出最后一组的结果 System.out.print(freq + "x" + oldNum + "."); sc.close(); } }
代码说明
- 初始输入判断:先检查是否有输入数字,避免空输入时出现异常
- 第一组数字初始化:直接读取第一个数字作为初始的
oldNum,频次设为1,逻辑更清晰 - 循环处理逻辑:
- 每次读取当前数字,和上一个数字比较
- 相同则频次加1
- 不同则先输出上一组的统计结果,再重置频次和上一个数字
- 最后一组输出:循环结束后,必须输出最后一组连续数字的结果,因为循环里只在遇到不同数字时输出前面的组
测试示例
- 输入:
1 1 1,输出:3x1. - 输入两行:
输出:1 1 1 7 7 1 1 03x1.2x7.2x1.1x0.,完全符合你的需求
内容的提问来源于stack exchange,提问作者Ihab98
相关产品推荐
相关产品推荐

