我需要帮助构建一个直方图(在Java中),它将获取一个数字列表(一个数组),范围从0到9,并输出每个数字的出现次数。例如,使用{1,5,3,4,5,5,5,4,3,2,5,5,5,}
将打印:
0 - 0
1 - 1
2 - 1
3 - 3
4 - 2
5 - 7
6 - 0
7 - 0
8 - 0
9 - 0
这是我到目前为止的代码:
import java.util.Scanner;
public class Histogram
{
private int[] numCount;
public Histogram(int[] array)
{
setArray(array);
}
public void setArray(int[] array)
{
numCount=array;
}
public String toString()
{
int count=0;
String boi="";
for(int x=0; x<=9; x++)
{
for (int y=0; y<numCount.length; y++)
{
if (numCount[x]==numCount[y])
count++;
boi=x+" - "+ count+"\n";
}
}
return boi;
}
}
当我运行它(在一个单独的跑步者文件中)时,它打印&#34; 9-40&#34;。非常感谢任何可以提供的帮助。谢谢!
答案 0 :(得分:1)
您的代码中有几个错误:首先是,您没有在外部for循环中初始化count
。在您的代码中,count
设置为0
一次并为每个数字递增,但它永远不会重置。
第二个是比较numCount[x] == numCount[y]
。这将检查位置numCount
中x
数组中的值在数组中的频率。
然后创建了字符串boi
,但是您没有将最新的行附加到它,而是覆盖它。所以你总会看到最后一行(x = 9
)
以下方法应该有效:
public String toString() {
String boi="";
for(int x=0; x <= 9; x++) {
int count=0;
for (int y=0; y < numCount.length; y++) {
if (x == numCount[y]) {
count++;
}
}
boi = boi + x + " - " + count + "\n";
}
return boi;
}
(您也可以使用boi += x + " - " + count + "\n";
或StringBuilder
及其append
- 方法)