如何将数组生成的直方图从垂直显示改为水平显示?
修复水平直方图打印问题的方案
你的代码里有几个关键逻辑错误,导致输出变成了垂直排列,我来一步步帮你修正:
问题拆解
- 冗余且错误的日期判断:你用
if(day[i]=="mon")只处理了周一的情况,其他日期完全没被处理;而且Java里字符串相等判断不能用==(它比较的是对象引用,不是内容),不过这里根本不需要逐个判断日期——day数组和温度数组是索引一一对应的,直接用当前索引关联两者就行。 - 内层循环条件错误:你写的
for(int j=0;j< array[j]; j++)里,循环条件误用了array[j],这会导致循环次数混乱,应该用当前日期对应的温度值array[i]。 - 缺少换行操作:每个日期的星号打印完后没有换行,所有内容会挤在一起,自然出现奇怪的排列。
修正后的完整代码
public static void printHistogram(int[] array) { String[] day = {"mon","tue","wed","thur","fri"}; System.out.println("Histogram of temperatures"); System.out.println("-------------------------"); // 遍历每个日期,索引i同时关联日期和对应温度 for(int i=0; i < day.length; i++) { // 打印日期与分隔符 System.out.print(day[i] + "\t|"); // 根据当前温度值打印对应数量的星号 for(int j=0; j < array[i]; j++) { System.out.print("*"); } // 每个日期打印完成后换行,实现每行一个水平直方图 System.out.println(); } } // 调用示例 public static void main(String[] args) { int[] degree = {15,16,17,18,19}; printHistogram(degree); }
关键修改说明
- 去掉了针对单个日期的
if判断,直接通过索引i同时访问day[i]和array[i],确保每个日期都被处理。 - 内层循环条件改为
j < array[i],保证打印的星号数量和当前日期的温度值一致。 - 新增
System.out.println();,让每个日期的直方图单独占一行,符合你想要的水平样式。
预期输出
运行修正后的代码,你会得到如下结果:
Histogram of temperatures ------------------------- mon |*************** tue |**************** wed |***************** thur |****************** fri |*******************
内容的提问来源于stack exchange,提问作者SJ K
相关产品推荐
相关产品推荐

