如何用Java根据用户输入的数组打印正确的星号柱状图?
问题分析
你现有代码的逻辑是逐个遍历数组元素,把每个元素对应的星号纵向换行打印,最终打出来的是分散的竖排星号,不符合横向对齐的柱状图要求。
正确的柱状图需要从最高高度开始,从上到下逐行打印:每一行依次检查每个数组元素的高度是否大于当前行的层级,满足就输出星号,否则输出空格占位,保证所有列对齐。
修正后的代码
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arr = new int[n]; int maxHeight = 0; // 读取数组的同时统计最大高度,确定总行数 for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); if (arr[i] > maxHeight) { maxHeight = arr[i]; } } // 从最高层开始逐行打印 for (int level = maxHeight; level > 0; level--) { // 遍历每一列(每个数组元素) for (int j = 0; j < n; j++) { // 当前元素高度大于等于当前层级就打星号,否则打空格 if (arr[j] >= level) { System.out.print("* "); } else { System.out.print(" "); } } // 一行打印完换行 System.out.println(); } } }
效果验证
输入示例的参数:
5 3 1 0 7 5
输出结果和需求的示例效果完全一致。
内容的提问来源于stack exchange,提问作者user15237617
相关产品推荐
相关产品推荐

