Задание 2
Изменить программу, созданную на Java на основе задания 2 лабораторной работы № 4. Добавить в класс, созданный на основе индивидуального варианта, поле типа Calendar и выполнить сортировку объектов по этому полю. Использовать в программе перечислимый тип данных.
Пример 2
В листинге 2 представлена программа, в которой формируется исходный список студентов, список студентов с минимальным рейтингом, а также осуществляется поиск информации о рейтинге студента по его фамилии. Исходный список студентов сортируется по фамилии, рейтингу и дате рождения студента. Для описания даты рождения студента используется класс Calendar из пакета java.util. В программе используется перечислимый тип данных для задания варианта сортировки.
Для создания программы использовалась среда разработки NetBeans IDE 8.0. На рисунке 3 показан состав проекта программы.
Рисунок 3 – Состав проекта программы
Создание проекта в NetBeans: Файл -> Создать проект -> Java -> Приложение Java.
Компиляция, сборка и выполнение проекта: Выполнить -> Запустить проект.
На рисунке 4 показан результат выполнения программы.
Листинг 2
// Primer.java
package primer;
import java.util.*;
class Student implements Comparable <Student>
{ private String fam;
private String name;
private int grade; //рейтинг
private Calendar date;
public Student(String fam, String name, int grade, Calendar date)
{ this.fam = fam;
this.name = name;
this.grade = grade;
this.date = date;
}
public Student(){};
public String getfam(){ return fam;}
public String getname(){ return name;}
public int getgrade(){ return grade;}
public Calendar getdate() { return date;}
public void output()
{ String str = String.format("%-10s%-10s%4d %td.%tm.%tY",
fam,name,grade,date,date,date);
System.out.println(str);
}
@Override
public int compareTo(Student obj)
{ return date.compareTo(obj.getdate());
}
}
class Primer {
public static void main(String[] args) {
Scanner in;
in = new Scanner(System.in);
Calendar dt1 = Calendar.getInstance();
dt1.set(1991, Calendar.JUNE, 1);
Calendar dt2 = Calendar.getInstance();
dt2.set(1990, Calendar.JANUARY, 15);
Calendar dt3 = Calendar.getInstance();
dt3.set(1991, Calendar.DECEMBER, 25);
Student[] st = new Student[3];
st[0] = new Student ("Сидоров","Петр",80,dt1);
st[1] = new Student ("Петров","Петр",56,dt2);
st[2] = new Student ("Иванов","Иван",70,dt3);
System.out.println("Список студентов: ");
MyClassComparator comparator = new MyClassComparator();
comparator.setCompareMethod(MyClassCompareMethods.BY_FAM);
Arrays.sort(st, comparator);
System.out.println("Compare by fam:");
System.out.printf("%-10s%-10s%-10s%-10s\n","Фамилия","Имя","Рейтинг","Дата рождения");
for (int i = 0; i<st.length; i++)
st[i].output();
comparator.setCompareMethod(MyClassCompareMethods.BY_GRADE);
Arrays.sort(st, comparator);
System.out.println("Compare by grade:");
System.out.printf("%-10s%-10s%-10s%-10s\n","Фамилия","Имя","Рейтинг","Дата рождения");
for (int i = 0; i<st.length; i++)
st[i].output();
comparator.setCompareMethod(MyClassCompareMethods.BY_DATE);
Arrays.sort(st, comparator);
System.out.println("Compare by date:");
System.out.printf("%-10s%-10s%-10s%-10s\n","Фамилия","Имя","Рейтинг","Дата рождения");
for (int i = 0; i<st.length; i++)
st[i].output();
int min = st[0].getgrade();
for(int i = 0; i<st.length; i++)
if (st[i].getgrade() < min)
min = st[i].getgrade();
in = new Scanner(System.in);
System.out.print("Укажите фамилию студента: ");
String fam = in.nextLine();
String f; int fl = 0;
for(int i = 0; i<st.length; i++)
{ f =st[i].getfam();
if (f.equals(fam))
{System.out.println("Рейтинг студента "+ fam+" - "+st[i].getgrade());
fl = 1;
}
}
if (fl == 0) System.out.println("Нет в списке студента "+fam);
System.out.println("Список студентов с минимальным рейтингом: ");
System.out.printf("%-10s%-10s%-10s%-10s\n","Фамилия","Имя","Рейтинг","Дата рождения");
for(int i = 0; i<st.length; i++)
if (st[i].getgrade() == min)
st[i].output();
}
}
enum MyClassCompareMethods {
BY_FAM,
BY_GRADE,
BY_DATE;
}
class MyClassComparator implements Comparator <Student>
{ private MyClassCompareMethods compareMethod;
public void setCompareMethod(MyClassCompareMethods method) {
compareMethod = method;
}
@Override
public int compare(Student o1, Student o2) {
switch (compareMethod) {
case BY_FAM:
int famDiff = o1.getfam().compareTo(o2.getfam());
if (famDiff != 0) return famDiff;
break;
case BY_GRADE:
int gradeDiff = Integer.compare(o1.getgrade(), o2.getgrade());
if (gradeDiff != 0) return gradeDiff;
break;
case BY_DATE:
}
//Если приоритетное сравнение вернуло 0 - сравниваем по умолчанию
return o1.compareTo(o2);
}
}
Рисунок 4 – Результат выполнения программы