Назад | Начало урока | Вперед
Содержание

Глава 3

Задача 3.13 "Гистограмма."

Проверьте, сможете ли вы создать класс на основе примера 3.4, который включает методы, рисующие линию из звездочек и ось, и может быть вызван для вывода гистограммы, базирующейся на разных данных. Протестируйте его на следующих примерах:

а) генерирование случайных чисел, которые соответствуют значениям температур для данного месяца (от 10 до 30 градусов Цельсия).

б) установка соответствия между значениями функции sin x и значениями температур от 0 до 90 градусов Цельсия.

Решение

Здесь сразу задано три задания.

Вверх

Задание 1

Создадим класс HistGraf и поместим методы bar() и axis() внутрь класса. Кроме того объявим в классе две переменные и инициируем их в конструкторе класса.

class HistGraf {

int label;
int h;

// constructor
HistGraf (int l, int c) {

label = l;
h = c;
}
void bar (int label, double h) {
...
}

void axis () {

...
}
}

Теперь можно будет в главной программе вызывать эти оба метода как методы класса HistGraf и передавать им в параметры переменные, которые были объявлены при создании экземпляра класса.

HistGraf Hist = new HistGraf (5, 30);

// Display a bar for each year and then the final axis
for (int year = 1; year <= Hist.label; year++) {

Hist.bar(year, Math.random()*(Hist.h));
}
Hist.axis ();

Код программы:


class Histogram {

Histogram() {

HistGraf Hist = new HistGraf (5, 30);

// Display a bar for each year and then the final axis
for (int year = 1; year <= Hist.label; year++) {

Hist.bar(year, Math.random()*(Hist.h));
}
Hist.axis ();
}


public static void main (String [] args) {

new Histogram ();
}


}

class HistGraf {

int label;
int h;

// constructor
HistGraf (int l, int c) {

label = l;
h = c;
}
void bar (int label, double h) {
// Draws a single histogram bar labelled
// with the years and consisting of the given
// number of stars

System.out.print(label+"\t|");
int stop = (int) Math.round(h);
for (int star = 0; star < stop; star++)

System.out.print('*');
System.out.println(" " + (long) h);
}

void axis () {

// Draws a horizontal axis with ticks+1 divisions
// labelled in steps of 10. Each division is 10
// characters wide.

int ticks = 5;

// Print the line
System.out.print('\t');
for (int line = 0; line < ticks*10; line++)
System.out.print("=");
System.out.println("=");

//Print the ticks
System.out.print('\t');
for (int n = 0; n < ticks; n++)
System.out.print("+ ");
System.out.println('+');
// Label the ticks, including the last one
System.out.print('\t');
for (int n = 0; n <= ticks; n++)
System.out.print(n*10 + " ");
System.out.println();

// Label the whole axis
System.out.println("\t\t\t\tcm");

}

} //end class HistFraf


Результат :

Подсказка


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz