【问题标题】:Histogram frequency help Java直方图频率帮助 Java
【发布时间】:2009-12-13 00:03:35
【问题描述】:
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();
}

}

我需要有关此直方图的帮助。

构造函数是由低数和高数生成的(所以如果我把 3 to 9: 这些都是它期望的数字,其他的都被忽略了)

readValue 方法将一直循环,直到用户键入 -1。意义 如果我输入3, 4, 6, 4, 6, 9 , 5, 9, 4, 10 -1... 那么它将存储 frequency[] 中的所有内容。我如何做到这一点,以便每个值都可以 在frequency[]中跟踪?

3 出现一次,4 出现 3 次,7 从未出现,9 出现两次

Printer() 会给我一个看起来像这样的直方图 (使用之前输入的数字...)

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

如何使用频率必须打印的数字 星号出现的数字?

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

类型 3 “3 出现 2 次”

类型 10“10 超出范围。”

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

【问题讨论】:

  • 听起来像是一个做我的家庭作业的问题

标签: java class histogram


【解决方案1】:

您几乎完成了,还有一些愚蠢的错误。您的 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";

最后,你必须记得调用它。只需在 main 的末尾再添加一行:

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

现在可以了! (只要您不输入超出范围的数字。)

【讨论】:

    猜你喜欢
    • 2019-04-14
    • 2015-10-11
    • 2013-10-09
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多