首页 > 解决方案 > 如何在java中用星号绘制图中给出的图表

问题描述

在此处输入图像描述

我正在尝试获得如图所示的图表。我在每个月的整数数组中有一个包含月份名称和相应星号数的字符串数组(例如,5 月为 8,3 月为 -9)。我正在尝试使用这种对齐方式进行绘图。每个月的星号值随给定输入而变化。我不知道如何进行这种对齐。

标签: javacharts

解决方案


我的第一种方法是这样的:

String[] names = new String[]{"January", "February", "March", "April", "May", "June", "July"};
int[] asterisks = new int[]{15, 17, -7, -9, 7, 13, 15};

int maxMinName = 0, maxMaxName = 0;
for (int asterisk : asterisks) {
  if (asterisk > maxMaxName) {
    maxMaxName = asterisk;
  }
  if (asterisk < maxMinName) {
    maxMinName = asterisk;
  }
}

final String fmt =
    "%" + Math.max(1, Math.abs(maxMinName)) +
    "s|%-" + Math.max(1, Math.abs(maxMaxName)) + "s %s";

for (int i = 0; i < names.length; i++) {
  StringBuilder asterisk = new StringBuilder();
  for (int j = 0; j < Math.abs(asterisks[i]); j++) {
    asterisk.append('*');
  }

  if (asterisks[i] < 0) {
    System.out.println(String.format(fmt, asterisk, "", names[i]));
  } else {
    System.out.println(String.format(fmt, "", asterisk, names[i]));
  }
}

产生:

         |***************   January
         |***************** February
  *******|                  March
*********|                  April
         |*******           May
         |*************     June
         |***************   July

推荐阅读