我有一个重复数字的数组,我需要在"直方图"中显示它们。由" *"制作。直方图应如下所示:
*
* *
* * *
* * * *
* * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
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***
如何创建垂直直方图?
答案 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