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

Глава 3

Задача 3.2 "Участники марафона "

- Теперь напишите программу Race, которая создаст объекты для бегунов, сгенерирует случайным образом время пробега для каждого из них, а затем выведет список бегунов с подробными их описаниями, включая результаты пробега и лучший показатель (Используйте для этого метод Math.min).

Победитель пробега так же определяется в этой программе, мы вернемся к этой задаче в гл 4.

Решение

2-й вариант

1. Классы Stayer и Time, которыми мы пользовались в прошлой программе оставим без изменений. Создадим две переменных и три простых массива:

int maxScore = 180;
int m = 5;

int scoreFreqs [] = new int [m];
Time t[] = new Time[m];
Stayer stayer[] = new Stayer[m];

В первом массиве сохраним случайно сгенерированное время пробега (всего пять элементов массива соответственно количеству бегунов).
Во втором массиве сохраним пять инициализированных случайным значением времени экземпляров класса Time.
Третий массив будет состоять из самих спортсменов.
Вот цикл, в котором инициализируются первые два массива.

for (int i=0; i < 5; i++) {

while(scoreFreqs[i] < 105){
scoreFreqs[i] = (int) (Math.random() * maxScore);
}
System.out.println(scoreFreqs[i]);
t[i] = new Time(scoreFreqs[i]);

}

В следующем цикле for определим лучшее время пробега, используя для стравнения
объектов Time функцию lessThan():

Time highest = t[0];
Time number = t[0];
int n = 0;
//

for (int i = 0; i < 5; i++) {

number = t[i];
if (number.lessThan(highest)) {
highest = number; n++;
}
}

Наконец инициализируем массив спортсменов и выведем результаты.

stayer[0] = new Stayer("England", "Edgar Green", 32, t[0]);
stayer[1] = new Stayer("Germany", "Kurt Schnitke",35, t[1]);
stayer[2] = new Stayer("Italy", "Marko Pavarotti", 29, t[2]);
stayer[3] = new Stayer("Spane", "Hose Rodriges", 28, t[3]);
stayer[4] = new Stayer("Norvegien", "Tur Bonadal", 31, t[4]);

System.out.println();
System.out.println(" Maraphon1 information\n");

System.out.println(" In the maraphon run : ");
System.out.println(" ======================= ");

stayer[0].write();
stayer[1].write();
stayer[2].write();
stayer[3].write();
stayer[4].write();
System.out.println();
System.out.println("Best result - " + highest + " by " + stayer[n].name + " from " + stayer[n].country);

}

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

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


class Maraphon1 {

int maxScore = 180; int m = 5;

int scoreFreqs [] = new int [m];
Time t[] = new Time[m];
Stayer stayer[] = new Stayer[m];

Maraphon1 () {

for (int i=0; i < 5; i++) {

while(scoreFreqs[i] < 105){
scoreFreqs[i] = (int) (Math.random() * maxScore);
}
System.out.println(scoreFreqs[i]);
t[i] = new Time(scoreFreqs[i]);

}

Time highest = t[0];
Time number = t[0];
int n = 0;
//

for (int i = 0; i < 5; i++) {

number = t[i];
if (number.lessThan(highest)) {
highest = number; n++;
}
}


stayer[0] = new Stayer("England", "Edgar Green", 32, t[0]);
stayer[1] = new Stayer("Germany", "Kurt Schnitke",35, t[1]);
stayer[2] = new Stayer("Italy", "Marko Pavarotti", 29, t[2]);
stayer[3] = new Stayer("Spane", "Hose Rodriges", 28, t[3]);
stayer[4] = new Stayer("Norvegien", "Tur Bonadal", 31, t[4]);

System.out.println();
System.out.println(" Maraphon1 information\n");

System.out.println(" In the maraphon run : ");
System.out.println(" ======================= ");

stayer[0].write();
stayer[1].write();
stayer[2].write();
stayer[3].write();
stayer[4].write();
System.out.println();
System.out.println("Best result - " + highest + " by " + stayer[n].name + " from " + stayer[n].country);

}

public static void main (String [ ] args) {

new Maraphon1 ();

}
}


class Time {

int hour;
int min;

Time (int h, int m) {

hour = h;
min = m;
}

Time (int mins) {

hour = mins / 60;
min = mins % 60;
}

Time (double t) {

hour = (int) t;
min = (int) t*100 - hour*100;
}

Time (Time t) {

hour = t.hour;
min = t.min;
}

void addTime (int m) {

min +=m;
hour+= min / 60;
min %= 60;
}

boolean lessThan (Time t) {

return hour < t.hour | (hour==t.hour & min < t.min);
}

public String toString () {

return hour + ":" + min + " ";
}
}


class Stayer {

String country; String name;
int age;
Time bestTime;

Stayer(String c, String n, int a, Time t ){

country = c;
name = n;
age = a;
bestTime = new Time(t);
}

void write () {

System.out.println(name + " " + age+ " age "+ "from " + country +
" the bestMaraphonTime - " + bestTime);
}
}


Результат :

Подсказка

Теперь программа выводит данные обо всех спортсменах. Затем случайным образом дает им время забега. Определяет лучшее время, и выводит лучшее время и кто это время показал.

Это интересная программа. С каждым программы запуском спортсмены показывают разное время и то один, то другой по очереди выходят вперед.

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


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

Hosted by uCoz