diff --git a/labs/4/Group.java b/labs/4/Group.java new file mode 100644 index 0000000..62c29c1 --- /dev/null +++ b/labs/4/Group.java @@ -0,0 +1,100 @@ +/* + * %W% %E% Dymik739 + * Email: dymik739@109.86.70.81 + * + * Copyright (C) 2023 FIOT Dev Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import java.util.Arrays; + +/** + * Group class defines a representation of a university group with students + * that can be used as a convenient structure to look at students' statistics. + * + * @version 0.1 20 May 2023 + * @author Dymik739 + */ +public class Group { + /** + * Main method which should be executed at the start of this application. + * + * @since 0.1 + */ + public static void main() { + Student[] studentList = { + // name, results, motivation%, ability%, courseâ„– + new Student("Davie", 16.3, 93.5, 98.9, 5), + new Student("Terry", 99.4, 49.3, 73.2, 7), + new Student("Mark", 67.9, 15.5, 7.8, 4), + new Student("Rand", 85.5, 82.6, 99.9, 12), + new Student("Steve", 1.2, 99.8, 99.2, 1) + }; + + System.out.println("Original students array:"); + printStudents(studentList); + + Arrays.sort(studentList, (o1, o2) -> o1.getName().compareTo(o2.getName())); + + System.out.println("\nArray, sorted by students' name:"); + printStudents(studentList); + + Arrays.sort(studentList, (o1, o2) -> + compareDouble(o2.getResults(), o1.getResults())); + + System.out.println("\nArray, sorted by the reverse of students' " + + "score results:"); + printStudents(studentList); + + System.out.println("\nAs we can clearly see, " + + studentList[studentList.length-1].getName() + " with " + + studentList[studentList.length-1].getMotivationPercent() + + "% of motivation and " + + studentList[studentList.length-1].getLearningAbilitiesPercent() + + "% ability to learn will be the one who is kicked " + + "from this university, because such is our life."); + } + + /** + * Outputs to stdout a given array of students in a fancy way. + * + * @param array array to print out + */ + private static void printStudents(Student[] array) { + for (Student s : array) { + System.out.println(s); + } + } + + /** + * Compares numbers of type Double + * + * @param i1 first number + * @param i2 second number to compare + * @return if the first argument is greater, 1 is returned + * if the second argument is greater, -1 is returned + * if the arguments are equal, 0 is returned + */ + private static int compareDouble(double i1, double i2) { + if (i1 > i2) { + return 1; + } else if (i1 < i2) { + return -1; + } else { + return 0; + } + } + +} diff --git a/labs/4/Student.java b/labs/4/Student.java new file mode 100644 index 0000000..09af2ae --- /dev/null +++ b/labs/4/Student.java @@ -0,0 +1,131 @@ +/* + * %W% %E% Dymik739 + * Email: dymik739@109.86.70.81 + * + * Copyright (C) 2023 FIOT Dev Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * represents a student with generic terms and phrases to let programmers + * write more readable code. + * + * @author Dymik739 + * @version 0.1 + * @since 0.1 + */ +public class Student { + /** + * name of the student + */ + private String name; + + /** + * overall ranking the student gets after finishing all courses + */ + private double results; + + /** + * a reasonable variable showing student motivation. The higher this + * number is, the better this student studies. + */ + private double motivationPercent; + + /** + * general ability to learn which directly affects learning speed. + */ + private double learningAbilities; + + /** + * shows the amount of subjects this student is studying. + */ + private int chosenCoursesAmount; + + /** + * This constructor lets you create the Student class right away + * + * @param name the name of this student + * @param results starting point for the overall ranking score of this + * student + * @param motivationPercent this student motivation level. Higher values + * allow for more jobs taken consecutively. + * @param learningAbilities directly affect learning speed of this student + * @param chosenCoursesAmount amount of courses chosen by this student. + * Roughly shows the load being put on them + * @since 0.1 + */ + public Student(String name, double results, double motivationPercent, + double learningAbilities, int chosenCoursesAmount) { + this.name = name; + this.results = results; + this.motivationPercent = motivationPercent; + this.learningAbilities = learningAbilities; + this.chosenCoursesAmount = chosenCoursesAmount; + } + + /** + * This method allows you to print out the student object in a nice way. + * + * @since 0.1 + */ + @Override + public String toString() { + return "Student(name = '" + this.name + "', results = " + this.results + + ", motivationPercent = " + this.motivationPercent + + ", learningAbilities = " + this.learningAbilities + + ", chosenCoursesAmount = " + this.chosenCoursesAmount + ")"; + } + + /** + * Getter for the private name field of this class + * + * @return String containing this student's name + * @since 0.1 + */ + public String getName() { + return this.name; + } + + /** + * Getter for the private results field of this class + * + * @return double representing final score of the student + * @since 0.1 + */ + public double getResults() { + return this.results; + } + + /** + * Getter for the private motivationPercent field of this class. + * + * @return double representing strenght of this student's motivation to + * learn + * @since 0.1 + */ + public double getMotivationPercent() { + return this.motivationPercent; + } + + /** + * Getter for the private motivationPercent field of this class. + * + * @return double representing how quickly this student can learn + * @since 0.1 + */ + public double getLearningAbilitiesPercent() { + return this.learningAbilities; + } +}