Глава 06
Вверх
Пример 06_01 Frequencies Определение частоты употребления значений
В этой программе использовано применение массива и функции Math.random()
class Frequencies
{
Frequencies ()
{
int maxscore = 20;
for (int i=0; i < 100; i++)
{
System.out.println("Table of Score Frequencies\n"+
public static void main (String [] args)
{
Результат:
Программа проста.
Сначала объявляем переменные:
int maxscore = 20;
Далее инструкция Math.random() * maxscore случайным образом генерирует целое число
for (int i=0; i < 100; i++)
{
это сгенерированное случайное значение присваивается переменной score, эта переменная
Этот элемент инкременируется.
Вверх
Пример 06_02 Соревнования по прыжкам в воду
Программа состоит из двух модулей. Первый модуль класс Dive.
class Dive
{
/* The Dive Class by J M Bishop Dec 1996
int minJudge, maxJudge, minScore, maxScore, sum;
private int noOfJudges;
Dive (int n)
{
void setScore (int i, int s)
{
void assessScores()
{
Анализ
Сначала объявляются переменные
private int noOfJudges;
Далее в конструкторе создается (то есть под него выделяется память) объявленный ранее массив,
Число элементов массива передается через параметр конструктора и равно числу судей. Таким образом каждый судья будет иметь в массиве свою ячейку, куда он кладет свою оценку. Таким образом получается массив с оценками.
Функция assessScores() просматривает весь инициализированный массив и делает всю остальную работу по поиску наибольшей и наименьшей оценки, и в какой ячейке (индекс элемента массива) они находятся, то есть какой судья их дал. Вычисляет так же сумму всех значений в массиве.
Алгоритм поиска наибольшей и наименьшей оценки в этом массиве традиционен. Сначала берется первый элемент массива и он считается наименьшим (или наибольшим), затем выбираются по очереди все элементы массива и сравниваются с наименьшим ( или наибольшим), если он оказывается еще меньше, то значение заменяется вновь найденным наименьшим. Просмотрев весь массив, найдем наименьшее ( или наибольшее) значение.
Второй модуль программы является основным, в котором используется класс Dive.
class DivingCompetition
{
/* The Diving program by J M Bishop Dec 1996
Display d = new Display ("Diving Competition");
DivingCompetition () throws IOException
{
headings ();
double result, total = 0;
Dive dive = new Dive (noOfJudges);
for (int i=0; i < noOfDives; i++)
{
void headings ()
{
d.println("For each of " + noOfDives +
public static void main (String [] args) throws IOException
{
Рис 6.2 Интерфейс класса Display для программы "Соревнования по прыжкам в воду".
Результат выполнения программы будет выведен в поле TextArea.
Программа еще интересна для меня тем, что в ней интерактивно считываются с экрана сведения (значения типа int) введенные пользователем.
Анализ:
Объявляем переменные:
Display d = new Display ("Diving Competition");
Далее в конструкторе вызывается функция headings ()
headings ();
Эта функция дает объявление в правой части окна Display (там, гды выводятся
результаты), а в левой части окна при помощи цикла создает сразу восемь
элементов типа TextField. Поле типа TextField создается при помощи вызова функции
prompt () класса Display с параметрами - d.prompt ("Judge "+i,0) :
d.println("For each of " + noOfDives +
for (int i=0; i < noOfDives; i++)
{
В последней инструкции - dive.setScore(j, score) - мы инициализировали массив с оценками.
Вспомните функцию:
Теперь, когда массив с оценками инициализирован и с ним можно работать, вызывается функция:
Эта функция как мы помним, вычисляет наивысшую и наинизшую оценки и определяет судей, которые дали две крайних оценки.
Далее остается рассчитать среднюю оценку одного прыжка без учета максимального и минимального результата:
Увеличим значение total, чтобы в дальнейшем подсчитать среднюю оценку из трех прыжков:
Выведем результаты этого прыжка:
Конец цикла for, который надо повторить три раза для каждого из трех прыжков
Выведем окончательную оценку по трем прыжкам:
Назад |
Начало урока |
Вверх |
Вперед
import javagently.*;
* ----------------------- Java 1.1
* updated May 2000
* Counts the frequencies of scores from 0 to 19.
* Tested by generating random numbers.
* Illustrates simple array handling
*/
int scoreFreqs [] = new int [maxscore];
int score;
scoreFreqs[score] ++;
"==========================\n\n"+
" Score occurred");
for (int i = 0; i < maxscore; i++)
{
Stream.format(scoreFreqs[i], 6));
Frequencies ()
{
int scoreFreqs [] = new int [maxscore];
int score;
в интервале от 0 до maxscore ( в нашем случае это значение равно 20),
scoreFreqs[score] ++;
служит для определения индекса элемента в массиве
scoreFreqs[score] ++;
Это происходит в цикле случайным образом, так, что происходит накопление значений (за счет инкремента) в каждом элементе массива. Затем после 100 итераций индексы и значения элементов массива выводятся на экран.
System.out.println("Table of Score Frequencies\n"+
"==========================\n\n"+
" Score occurred");
for (int i = 0; i < maxscore; i++)
{
Stream.format(scoreFreqs[i], 6));
import java.io.*;
* Java 1.1 October 1997
* Stores and assesses diving scores for one dive.
*
* Illustrates arrays
*/
private int score [];
score = new int [noOfJudges];
maxScore = 0;
sum = 0;
for (int i = 0; i < noOfJudges; i++)
{
if (score[i] <= minScore)
{
minJudge = i;
if (score[i] > maxScore)
{
maxJudge = i;
minJudge++;
maxJudge++;
int minJudge, maxJudge, minScore, maxScore, sum;
private int score [];
Dive (int n)
{
score = new int [noOfJudges];
А инициализировать массив мы будем вызывая во втором модуле программы функцию setScore,
при чтении данных с экрана (какой судья сколько положил очков за выступление спортсмена).
void setScore (int i, int s)
{
void assessScores()
{
maxScore = 0;
sum = 0;
for (int i = 0; i < noOfJudges; i++)
{
if (score[i] <= minScore)
{
minJudge = i;
if (score[i] > maxScore)
{
maxJudge = i;
minJudge++;
maxJudge++;
import java.io.*;
import javagently.*;
* ------------------ Java 1.1 October 1997
* updated May 2000
* Uses the Judge class to record the
* correct scores for dives.
* Illustrates calling class methods,
* and typed methods and using arrays
* in a separate class. */
int noOfDives = 3;
int noOfJudges = 8;
// There is one Dives object which records 8 scored
// and is reused for each dive
int score;
d.println("Enter the scores for the judges");
d.ready("Press ready to continue");
for (int j = 0; j < noOfJudges; j++)
{
dive.setScore(j, score);
dive.assessScores();
result = (double) (dive.sum
- dive.minScore - dive.maxScore)
/ (double) (noOfJudges - 2);
total += result;
d.println("Scores " + dive.minScore + " from judge "
" from judge "
+ dive.maxJudge + " excluded.");
System.out.println("Diving average is : "+
"=======================\n");
" dives give scores for "+noOfJudges+" judges.");
for (int i = 1; i<=noOfJudges; i++)
int noOfDives = 3;//количество прыжков
int noOfJudges = 8;//количество судей
DivingCompetition () throws IOException
{
void headings ()
{
Далее создаем экземпляр класса Dave
"=======================\n");
" dives give scores for "+noOfJudges+" judges.");
for (int i = 1; i<=noOfJudges; i++)
Dive dive = new Dive (noOfJudges);
int score;
d.println("Enter the scores for the judges");
d.ready("Press ready to continue");
for (int j = 0; j < noOfJudges; j++)
{
dive.setScore(j, score);
void setScore (int i, int s)
{
dive.assessScores();
result = (double) (dive.sum
- dive.minScore - dive.maxScore)
/ (double) (noOfJudges - 2);
total += result;
d.println("Scores " + dive.minScore + " from judge "
" from judge "
+ dive.maxJudge + " excluded.");
System.out.println("Diving average is : "+
Содержание