2017-03-19 52 views
-4

我需要建立一个直方图(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; 
    }    

}

当我运行这个(在一个单独的亚军文件),它打印“9-40”。将不胜感激任何可以提供的帮助。谢谢!

+0

我想你的意思是'如果( numCount [y] == x)' – Andreas

+0

每个循环都会附加到boi字符串,但直到所有数字都被循环遍历,您才会知道最终的直方图。 – bejado

+0

你可能也是指'boi + = x +“ - ”+ count +“\ n”',实际上*追加*到'boi',并且在'y'循环之外,并且初始化'count = 0'在'x'循环中。那是4个逻辑错误。 – Andreas

回答

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 - 方法)

+0

非常感谢!它完美的作品。整个周末都在苦苦挣扎。 – Streethawk57