如何从数字重复的Java数组创建asteriks直方图?

时间:2015-06-10 16:32:05

标签: java arrays histogram repeat

我有一个重复数字的数组,我需要在"直方图"中显示它们。由" *"制作。直方图应如下所示:

            *
        *   *
  *     *   *
  *     * * *
* * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
1 2 3 4 5 6 7 8 9 10

我有这个数组

int[] repetition = new int[] {4,6,4,4,6,5,7,4,3,3};

我可以像这样水平打印:

1*****
2******
3****
4****
5******
6*****
7*******
8****
9***
10***

如何创建垂直直方图?

5 个答案:

答案 0 :(得分:0)

听起来你有代码来“bin”数据,有效地创建直方图。添加一些代码以跟踪所有容器中的最大计数。因此,在上面的示例中,最大值为8(来自bin 7)。

然后,设置一个阈值,从该最大值开始,并倒计时到一个。在每次迭代时,在与满足或超过阈值的箱对应的列中打印带星号的行。所以在第一行,只有第7列会得到一个星号,因为它是唯一符合当前阈值8的bin。下一行(阈值7),第5列和第7列将获得星号。等等。

希望自己编写代码足够了。

答案 1 :(得分:0)

我不会给你任何代码,但我可以给你一个开始的想法。

对于垂直直方图,即使它看起来是从上到下打印,但它不是;你不能垂直打印。使用循环(数组中的最高值是起始值,0是sentinel值,每次迭代递减1),其中每次迭代表示直方图上的水平线,您应该确定哪个x-label' s需要在该行上打印星号,对于那些在该行上没有星号的标签,在那里放置一个空格(用于格式化)。然后,创建另一个循环并使用它列出所有底部的x标签。

希望这有帮助!

答案 2 :(得分:0)

public static final void printHistogram(int[] coll) {
        int max = coll[0];
        for (int i : coll)
            max = i > max ? i : max;
        boolean[][] array = new boolean[max][coll.length];
        for (int i = coll.length - 1; i >= 0; i--) {
            for (int j = 0; j < coll[i]; j++) {
                array[j][i] = true;
            }
        }
        for (int i = array.length - 1; i >= 0; i--) {
            boolean[] booleans = array[i];
            for (boolean b : booleans) {
                System.out.print(b ? '*' : ' ');
            }
            System.out.println();
        }

        for (int i = 1; i <= array.length; i++) {
            System.out.print(i);
        }
    }

这可以按预期工作。

答案 3 :(得分:-1)

首先计算直方图的最大高度。

max=0;
for(int i: repetition)
    if(i>max)
        max=i;

然后,你从上到下印刷如下:

for(j=max;j>=1;j--){                  //For each possible height of the histogram.
    for(k=0;k<repetition.length;k++)  //Check height of each element
        if(repetition[k]>=j)
            System.out.print("*");    //Print * if the k-th element has at least a height j.
        else
            System.out.print(" ");    //Else, do print blank space
    System.out.println();             //Newline after every row.
}

PS:这只是一个想法,而不是一个完整的工作代码,它只适用于正高度值!

答案 4 :(得分:-1)

Integer用于使用Collections max函数。

se.exec_start                                :     593336938.868448
...
se.statistics.wait_start                     :             0.000000
se.statistics.sleep_start                    :     593336938.868448
se.statistics.block_start                    :             0.000000