为何while循环输出竖向列而非横向?Java直方图实现故障排查
直方图功能修复方案
原代码的问题分析
- 使用
System.out.println()输出导致星号竖向排列,且每行附带原数值,不符合横向输出星号的需求 - 小数部分提取逻辑错误:
num % 10无法正确获取小数点后的值(比如输入3.2时,num%10结果是3.2而非0.2),导致小数位小于5的数值无法正确取整 - 两个if分支输出内容完全一致,属于冗余逻辑
修正后的实现代码
public void histogram(double num) { // 对输入数值四舍五入取整,得到星号数量 int starCount = (int) Math.round(num); // 确保星号数量非负,处理0或负数输入 starCount = Math.max(starCount, 0); // 横向拼接所有星号 StringBuilder starLine = new StringBuilder(); for (int i = 0; i < starCount; i++) { starLine.append("*"); } // 输出最终的星号行 System.out.println(starLine); }
关键改进点
- 正确取整:使用
Math.round()直接实现四舍五入,完美匹配“小数位≥5向上取整,<5向下取整”的需求 - 横向输出:通过
StringBuilder一次性拼接所有星号后输出,保证星号横向排列 - 边界处理:用
Math.max()限制星号数量不小于0,输入0或负数时输出空行(0个星号) - 简化逻辑:删除原代码中无意义的重复判断,代码更简洁易读
内容的提问来源于stack exchange,提问作者Abdullah Malik
相关产品推荐
相关产品推荐

