Глава 6
Задача 6.3 "Кто в какой группе?"
Модернизируйте программу 4.8 ( в которой определялся средний возраст) так, чтобы в объект вводились такие значения как имена детей, их возраст и название группы (буквы от А до Г), а сами объекты хранились в массиве. Отсортируйте элементы массива по значениям возраста и задайте вывод информации о детях. Сможете ли вы отсортировать элементы массива по именам и по обозначениям групп?
Решение 1
Напишем программу, которая сортирует по возрасту.
Исходный файл будет иметь примерно следующую структуру:
К классу Child, который нами использовался в программе 4.8 добавим переменную groupName типа String, в которой будем сохранять название группы, которую посещает ребенок.
class Child {
Так же в программе используем два массива типа Child. Один массив будет состоять из 6 элементов, куда будем помещать детей из какой либо группы, и массив из 24 элементов, в который будем помещать всех детей. Сортировку будем производить в большом массиве, среди всех детей.
В главе 6 есть функция сортировки, которая подходит для любого объекта, лишь бы можно было сравнить две объекта между собой, определяя какой из них является большим по тому или другому признаку.
В данной конкретной программе мы передаем в параметр массив объектов Child и сравниваем его объекты по возрасту, при помощи инструкции:
if (a[j].age < a[chosen].age)
Таким образом функция сортировки будет выглядеть так:
void selectionSort2 (Child[] a, int n) {
Большой массив, в который вошли все дети, будет отсортирован по возрасту.
Код программы:
import java.io.*;
import javagently.*;
class AverangeAge {
void selectionSort2 (Child[] a, int n) {
Child temp;
int chosen;
for (int leftmost = 0; leftmost < n-1; leftmost++) {
chosen = leftmost;
for (int j = leftmost+1; j < n; j++)
if (a[j].age < a[chosen].age)
chosen = j;
temp = a[chosen];
a[chosen] = a[leftmost];
a[leftmost] = temp;
}
}
AverangeAge() throws IOException {
Stream in = new Stream(System.in);
// default the file to the keyboard
Stream fin = new Stream(System.in);
try {
fin = Filer.open("data.txt");
}
catch (FileNotFoundException e) {
System.out.println("Five tries up");
System.out.println("Connecting to keyboard by default");
}
System.out.println();
System.out.println(" AverangeAge ");
System.out.println("============================");
int m = 6;
Child ch[] = new Child[m];
Child ch1[] = new Child[m*4];
int test = 0; // ball of testing
long AverangeAgeGroup = 0;
long AverangeAgeTotal = 0;
int sumAgeChild = 0;
try {
int z = 0;
for (int i=0;i < 4;i++) {
String nameGroup = fin.readLine();
System.out.println(" ");
System.out.println("Groupe name - " + nameGroup);
sumAgeChild = 0;
for (int j=0;j < 6;j++) {
String nameChild = fin.readLine();
int ageChild = (int) Double.valueOf(fin.readLine()).doubleValue();
sumAgeChild = sumAgeChild + ageChild;
ch[j] = new Child(nameGroup,nameChild,ageChild);
ch1[z] = new Child(nameGroup,nameChild,ageChild);
// Report
ch[j].write();
//ch1[z].write();
z++;
}//end for
AverangeAgeGroup = Math.round(sumAgeChild/6);
AverangeAgeTotal = AverangeAgeTotal + AverangeAgeGroup;
System.out.println("AverangeAgeGroup - " + AverangeAgeGroup);
}//end for
}
catch (EOFException e) {
System.out.println(" All data is reading ");
}
selectionSort2(ch1,24);
System.out.println(" " );
System.out.println(" Sorting age" );
for (int j=0;j < 24;j++) {
ch1[j].write();
}
System.out.println("AverangeAgeTotal: " + Math.round(AverangeAgeTotal/4) );
}// AverangeAge construct
public static void main (String[] args) throws IOException {
new AverangeAge();
}
}// AverangeAge
class Child {
String groupName;
String name;
int age;
Child(String g, String n, int a ){
groupName = g;
name = n;
age = a;
}
void write () {
System.out.println(groupName + " " + name + " " + age+ " age ");
}
}
Результат :
AverangeAge
============================
Groupe name - Corn-flower
Corn-flower Poul McCartny 11 age
Corn-flower Jhon Lennon 9 age
Corn-flower Ringo Starkey 7 age
Corn-flower Gorge Harrison 10 age
Corn-flower Jhon Kennedy 9 age
Corn-flower Mike Jagger 8 age
AverangeAgeGroup - 9
Groupe name - Daisy
Daisy Poul Brown 7 age
Daisy Richard Stock 8 age
Daisy Wiliam Shekspear 9 age
Daisy Ernest Hemingway 10 age
Daisy Lewis Carrol 11 age
Daisy Mark Twen 7 age
AverangeAgeGroup - 8
Groupe name - Swallow
Swallow Edward Green 9 age
Swallow Wolfgang Mozart 10 age
Swallow Ludwig Beethoven 11 age
Swallow Ferenz List 7 age
Swallow Franz Bakkenbauer 7 age
Swallow Tomas Moor 9 age
AverangeAgeGroup - 8
Groupe name - Sky-lark
Sky-lark David Backham 11 age
Sky-lark Peter Resenfeld 9 age
Sky-lark Gorge Washington 10 age
Sky-lark Peter O-Tool 8 age
Sky-lark James Bond 9 age
Sky-lark Judy Bishoop 11 age
AverangeAgeGroup - 9
Sorting age
Corn-flower Ringo Starkey 7 age
Daisy Poul Brown 7 age
Daisy Mark Twen 7 age
Swallow Ferenz List 7 age
Swallow Franz Bakkenbauer 7 age
Corn-flower Mike Jagger 8 age
Daisy Richard Stock 8 age
Sky-lark Peter O-Tool 8 age
Daisy Wiliam Shekspear 9 age
Swallow Edward Green 9 age
Corn-flower Jhon Kennedy 9 age
Swallow Tomas Moor 9 age
Sky-lark Peter Resenfeld 9 age
Corn-flower Jhon Lennon 9 age
Sky-lark James Bond 9 age
Corn-flower Gorge Harrison 10 age
Daisy Ernest Hemingway 10 age
Sky-lark Gorge Washington 10 age
Swallow Wolfgang Mozart 10 age
Daisy Lewis Carrol 11 age
Corn-flower Poul McCartny 11 age
Sky-lark David Backham 11 age
Swallow Ludwig Beethoven 11 age
Sky-lark Judy Bishoop 11 age
AverangeAgeTotal: 8
Назад |
Начало урока |
Вверх |
Вперед
Содержание