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

Java整数count异常递增问题:ASCII艺术压缩函数输出不符

问题原因与修复方案

1. 数值跳变的直接原因:错用八进制格式化符

你代码里的String.format("%o,", count)犯了一个关键错误——%o是八进制整数的格式化符号,不是十进制!

十进制和八进制的对应关系刚好解释了你看到的跳变:

  • 十进制7 → 八进制显示为7
  • 十进制8 → 八进制显示为10
  • 十进制9 → 八进制显示为11
  • 十进制10 → 八进制显示为12

所以你看到count从7“跳”到10,实际是count增长到8时被转成了八进制的10;最终统计到10个'@',被格式化成八进制的12,这就是输出里出现12的原因。

2. 初始逻辑的合理性说明

你的需求是按fileChars的顺序输出连续字符数,第一个要统计的是fileChars[0](即'-')的连续次数。因为输入line开头是'@',和初始的lastChar='-'不匹配,所以第一次循环会输出初始的count=0(对应'-'的连续次数),这部分是符合预期的,问题出在后续的数值格式化上。

修复后的代码

把%o改成十进制格式化符%d,同时用StringBuilder代替String拼接提升性能:

public String compressLine(String line, char[] fileChars){
  StringBuilder outputLine = new StringBuilder();
  int count = 0;
  char lastChar = fileChars[0];
  for(char c : line.toCharArray()){
    if(c!=lastChar){
      outputLine.append(String.format("%d,", count));
      lastChar = c;
      count = 1;
    }else{
      count += 1;
    }
  }
  outputLine.append(count);
  return outputLine.toString();
}

验证结果

用你的测试输入line="@@@@@@@@@@---"、fileChars=[-, @],修复后的代码会输出0,10,3,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:40:32