0
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 から 9 を入力すると、これらは想定されるすべての数値であり、それ以外は無視されます)

このreadValueメソッドは、ユーザーが入力するまでループし続けます-1。つまり、3, 4, 6, 4, 6, 9 , 5, 9, 4, 10 -1... と入力すると、そのすべてが . に保存されますfrequency[]。で各値を追跡できるようにするにはどうすればよいfrequency[]ですか?

31回発生する、 43 回発生する、7まったく発生しない、92 回発生する

Printer()このようなヒストグラム図を作成します (以前に入力した数値を使用して...)

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

数字が発生した星の数を出力するために頻度が持つ数字をどのように使用すればよいですか?

query メソッドは、ユーザーに必要な数を尋ね、それが何回発生したかを伝えます。

タイプ 3「3 が 2 回発生する」

タイプ 10「10 は範囲外です。」

私はほとんどのコードを持っていますが、いくつかの部分を実装するのに助けが必要です.

4

1 に答える 1

1

あなたはほとんどそれをやった、いくつかのばかげた間違いがあります. starPrinter メソッドは、必要以上に星を 2 つ印刷します。あなたはこれを書くべきです:

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 の最後にもう 1 行追加するだけです。

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

今それは動作します!(範囲外の数字を入力しない限り。)

于 2009-12-13T00:20:49.213 に答える