Task 11 — Сортировка студентов
Сортировка и сравнение объектов по метрикам.
Edit on GitHubЗадание
Сортировка и сравнение объектов по метрикам. Документация собрана по исходному коду этой практики.
Решение
Полный код решения по этой практике:
Исходные файлы решения
Task11/Connection.javaTask11/SortingStudentsByGPA.javaTask11/Student.java
Task11/Connection.java
package Task11;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Connection {
String name;
int age;
public Connection(String name, int age) {
this.name = name;
this.age = age;
}
public static void main(String[] args){
List<String[]> c =new ArrayList<>();
c.add(new String[]{"Max", "10"});
c.add(new String[]{"Nicolai", "20"});
c.add(new String[]{"Tolic", "19"});
c.add(new String[]{"Dane", "17"});
List<String[]> r = new ArrayList<>();
r.add(new String[]{"Denes","23"});
r.add(new String[]{"Dasha", "30"});
r.add(new String[]{"Oleg", "27"});
//c.addAll(r);
//System.out.print(c);
List<String[]> t = mergeSort(c, r);
for (String[] d: t){
System.out.println("[" +d[0]+", "+d[1] +"]");
}
}
private static List<String[]> mergeSort(List<String[]> c, List<String[]> r) {
if (c.size()<=1 && r.size()<=1){
return merge(c, r);
}
int m1 = c.size()/2;
int m2 = r.size()/2;
List<String[]> left1 = c.subList(0, m1);
List<String[]> right1 = c.subList(m1, c.size());
List<String[]> left2 = r.subList(0,m2);
List<String[]> right2 = r.subList(m2, r.size());
List<String[]> sortleft = mergeSort(left1, left2);
List<String[]> sortright = mergeSort(right1, right2);
return merge(sortleft, sortright);
}
public static List<String[]> merge(List<String[]> left, List<String[]> right) {
List<String[]> result = new ArrayList<>();
int i = 0;
int j = 0;
while (i < left.size() && j < right.size()) {
if (Integer.parseInt(left.get(i)[1]) < Integer.parseInt(right.get(j)[1])) {
result.add(left.get(i));
i++;
} else {
result.add(right.get(j));
j++;
}
}
while (i < left.size()) {
result.add(left.get(i));
i++;
}
while (j < right.size()) {
result.add(right.get(j));
j++;
}
return result;
}
}
Task11/SortingStudentsByGPA.java
package Task11;
import java.util.*;
public class SortingStudentsByGPA implements Comparable<SortingStudentsByGPA>{
public String name;
public int bal;
public SortingStudentsByGPA(String name, int bal) {
this.name = name;
this.bal = bal;
}
@Override
public int compareTo(SortingStudentsByGPA o) {
return o.bal - this.bal;
}
public static void main(String[] args){
List<SortingStudentsByGPA> r = new ArrayList<>();
r.add(new SortingStudentsByGPA("Nicolai", 123));
r.add(new SortingStudentsByGPA("Oleg", 200));
r.add(new SortingStudentsByGPA("Sasha", 260));
r.add(new SortingStudentsByGPA("Nikita", 250));
Collections.sort(r);
for (SortingStudentsByGPA s : r){
System.out.println(s.name+ " Баллы "+s.bal);
}
}
}
Task11/Student.java
package Task11;
public class Student {
String name;
int iDNumber;
public Student(String name, int iDNumber) {
this.name = name;
this.iDNumber = iDNumber;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public int getiDNumber() {
return iDNumber;
}
public void setiDNumber(int iDNumber) {
this.iDNumber = iDNumber;
}
public static void main(String[] args){
Student[] s = new Student[6];
s[0]=new Student("Sol",1);
s[1]=new Student("Pol",2);
s[2]=new Student("Kol",3);
s[3]=new Student("Tol",7);
s[4]=new Student("Fol",0);
s[5]=new Student("Rol",4);
for(int i = 1; i < s.length; i++){
Student current = s[i];
int j = i-1;
while (j>=0 && s[j].getiDNumber() > current.getiDNumber()){
s[j+1]=s[j];
j--;
}
s[j+1]=current;
}
System.out.println(" ");
for(Student f: s){
System.out.println("Name: "+f.getName()+" id: "+f.getiDNumber());
}
}
}
Описание
В этом модуле используется 3 Java-файлов. Ключевые сущности: Connection, SortingStudentsByGPA, Student.
tip
Для проверки практики сначала запускайте тестовый/демо-класс из папки задачи, затем расширяйте модель новыми кейсами.
Вывод
Task 11 — Сортировка студентов документирует реальное решение из исходного кода.