直方图频率帮助Java

问题描述:

public class Histogram 
{ 
private int lo_; 
private int hi_; 
private int[] frequency_; 

public Histogram(int lo, int hi) 
{ 
    lo_ = lo; 
    hi_ = hi; 
    int range = hi_-lo_+1; 
    frequency_ = new int[range]; 
    for(int i =0; i <range; range++) 
     frequency_[i] = 0; 
} 

public void ReadValue() 
{ 
    Scanner in = new Scanner(System.in); 
    int value= in.nextInt(); 
    while(value != -1) 
    { 
     if(value >= lo_ && value <= hi_)    
     { 
      frequency_[value - lo_]++; 
      value = in.nextInt(); 
     } 
    } 
} 

private String starPrinter(int value) 
{ 
    String star = "*"; 
    for(int i = 0; i <= value ;i++) 
    { 
     star +="*"; 
    } 
    return star; 
} 

public String Printer() 
{ 
    String print = new String(); 
    int range = hi_-lo_+1; 
    int i = 0; 
    while(i<range) 
    { 
     print += (lo_+i)+" : "+ starPrinter(i)+ "\n"; 
     i++; 
    } 
    return print; 
} 


public int query(int value) 
{ 
    if (value >= lo_ && value <= hi_) 
    { 
     value -= lo_; 
     return starPrinter(value).length(); 
    } 
    else 
     return -1; 
} 

public static void main(String[] args) 
{ 
    Histogram test = new Histogram(3, 9); 
    test.ReadValue(); 
} 

} 

我需要关于此直方图的帮助。直方图频率帮助Java

由低数量和高数(所以如果我把3 〜9:这些都是它预计的数字,任何其他被忽略)产生的构造

readValue方法会不断循环,直到用户类型-1。含义 ,如果我输入3, 4, 6, 4, 6, 9 , 5, 9, 4, 10 -1 ...那么它将存储 所有在frequency[]。我如何使它在frequency[]中跟踪每个值可以是 ?

3发生一次,4发生三次,7永远不会发生,9发生两次

Printer()会让我看起来像这样 直方图图(使用之前输入的号码......)

3: * 
4: *** 
5: * 
6: ** 
7: 
8: 
9: ** 

如何使用打印频率的数字打印 星号码发生的数量?

查询方法会问他们想要什么号码的用户和 告诉他们多少次它发生:

类型3“3出现2次”

类型10“10超出范围“。

我有大部分的代码,我只需要帮助实现一些部分。

+0

听起来像是我的作业问题 – jitter 2009-12-13 00:11:18

你已经差不多完成了,有一些愚蠢的错误。您的starPrinter方法会打印比应该打印的更多的星星。您应该这样写:

private String starPrinter(int value) 
{ 
    String star = ""; 
    for(int i = 0; i < value ;i++) 
    { 
     star +="*"; 
    } 
    return star; 
} 

并且您将错误的参数传递给starPrinter。它应该是这样的:

print += (lo_+i)+" : "+ starPrinter(frequency_[i])+ "\n"; 

最后,你必须记得调用它。只需在主底添加一行:

public static void main(String[] args) 
{ 
    Histogram test = new Histogram(3, 9); 
    test.ReadValue(); 
    System.out.println(test.Printer()); // Add this line. 
} 

现在它的工作原理! (只要你不输入超出范围的号码。)