Java条形图方法

时间:2013-08-24 13:17:09

标签: java charts

我需要通过方法barChartPrinter的调用打印出条形图。即将打印barChartPrinter(5, 6, 2);:一个5 XX的垂直列,然后是 一个空格,然后是一个6 XX的垂直列和一个2 XX的垂直列。

这些数字是基于用户输入的,所以我想我需要收集数字并将它们存储在一个数组中。而我正在考虑涉及for循环, 但我不确定我该怎么做。

public class BarChart {

    public static void main(String args[]) {
        int[] list = new int[4];
        Scanner input = new Scanner(System.in);
        System.out.println("Enter four integers: ");
        for(int i = 0; i < list.length; i++)
        list[i] = input.nextInt();

        System.out.println();

        barChartPrinter(list);
    }       

    public static void barChartPrinter(int[] numbers) {
        int max = numbers[0];
        for (int i = 0; i < numbers.length; i++)
        if(numbers[i] > max)
            max = numbers[i];
    }
}

这就是我遇到的问题:定义打印出条形图的方法;给定用户输入值。该方法需要以这种格式打印出来,即

barChartPrinter(1, 2, 3, 4) =

出于某种原因,它不会显示如何在这里构建条形图,所以我只是描述它:

首先是一列XX,然后是XX列(其中两列垂直代表2),然后是另一列XX(但这次其中三列在彼此之上,代表3号)最后是XX * 4的另一列垂直。

任何指针?

1 个答案:

答案 0 :(得分:1)

好的,到目前为止我确信您知道创建水平条形图非常容易:

2 6 4

**
******
****

由于控制台PrintStream的print和println方法(out的{​​{1}})水平打印。您的作业的技巧是如何打印此图垂直。为此,你将不得不使用一点逻辑。由于这显然是家庭作业,我不会给你一个解决方案,而是建议选项。

  • 您知道您需要使用某种循环来连续打印行。
  • 一种可能的解决方案是通过首先找到数组保持的最大值来确定循环之前循环的次数。如果你这样做,那就使用for循环。
  • 另一种可能找不到max的解决方案,而只是循环完成。这里使用while循环。这将是我使用的选项,我会使用一个布尔变量,比如名为System.out,以帮助告诉while循环何时保持循环以及何时停止。
  • 如果你使用后一个选项,你将在循环中使用一个int计数器来检查你所在的行,并且你将在循环中推进这个计数器。
  • 您需要在while循环中嵌套for循环以遍历每个数组项。
  • 您将使用此计数器和数组项(在while循环中的for循环中)查看您最终打印的字符串是否应添加keepGoing
  • 在内部for循环之后,您将打印您创建的String。
  • 如果不存在"* "(您可以致电"* "),则myString.trim().isEmpty()和while循环应停止。

编辑:您发布的代码有点偏离,因为它告诉用户输入四个数字,但只接受三个。你想解决这个问题。


编辑2 您声明:

  嘿,对不起,是的,我把代码排序了。我编写了在方法中找到最大值的方法。我现在停留在实际制作图表的步骤上。我知道它会在每行水平打印XX,但我仍然难以理解如何实现这一点 - 我知道它将涉及一个for循环,但我看不出如何打印每列的XX ;如果我遗漏了一些明显的东西,请道歉

再一次,通过将大问题分成小步骤来解决您的问题,这是您能想到的最小问题,然后解决每个小步骤。你知道你将不得不构造一个要打印的String,所以你应该关注它,关于如何构造这个String,以便在需要的地方存在星号,并且当列应该存在空格时显示没有星号。尝试提出一个解决方案,甚至是部分解决方案,并将其作为您的问题的编辑发布,就像我将此编辑发布到我的答案中一样。