如何建立直方图?

时间:2017-03-19 19:12:48

标签: java

我需要帮助构建一个直方图(在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;。非常感谢任何可以提供的帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

您的代码中有几个错误:首先是,您没有在外部for循环中初始化count。在您的代码中,count设置为0一次并为每个数字递增,但它永远不会重置。 第二个是比较numCount[x] == numCount[y]。这将检查位置numCountx数组中的值在数组中的频率。 然后创建了字符串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 - 方法)