Справка по частоте гистограммы 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();
}

}

Мне нужна помощь по этой гистограмме.

Конструктор генерируется по младшему и старшему числу (поэтому, если я поставлю от 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 вне допустимого диапазона".

У меня есть большая часть кода, мне просто нужна помощь в реализации некоторых частей.


person user230474    schedule 13.12.2009    source источник
comment
Звучит как вопрос сделай мою домашнюю работу   -  person jitter    schedule 13.12.2009


Ответы (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.
}

Теперь это работает! (Пока вы не вводите число вне допустимого диапазона.)

person Mark Byers    schedule 13.12.2009