Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Да се напише класата Student во која што ќе се чуваат информации за:
- индекс на студент ФИНКИ (стринг составен од шест бројки)
- листа на поени добиени на лабораториски вежби по некој предмет ФИНКИ. По предметот се изведуваат максимум 10 лабораториски вежби.
- За класата да се напише конструктор Student(String index, List<Integer> points).
- Да се напише класа LabExercises во која што се чува колекција од студенти. За класата да се напишат следните методи:
- public void addStudent (Student student) - метод за додавање на нов студент во колекцијата
- public void printByAveragePoints (boolean ascending, int n) - метод којшто ќе ги печати првите n студентите сортирани според сумарните поени, а доколку се исти сумарните поени, според индексот, во растечки редослед доколку ascending е true, a во спротивно во опаѓачки.
- сумарните поени се пресметуваат како збирот на поените поделен со 10.
- public List<Student> failedStudents () - метод којшто враќа листа од студенти кои не добиле потпис (имаат повеќе од 2 отсуства), сортирани прво според индексот, а потоа според сумарните поени.
- public Map<Integer,Double> getStatisticsByYear() - метод којшто враќа мапа од просекот од сумарните поени на студентите според година на студирање. Да се игнорираат студентите кои не добиле потпис.
- import java.util.*;
- import java.util.stream.Collectors;
- class Student {
- private String index;
- private List<Integer> points_lab;
- public Student(String index, List<Integer> points_lab) {
- this.index = index;
- this.points_lab = points_lab;
- }
- public List<Integer> getPoints_lab() {
- return points_lab;
- }
- public String getIndex() {
- return index;
- }
- public boolean getsSignature(){
- return this.points_lab.size()>=8;
- }
- public double getSummedPoints(){
- return (points_lab.stream()
- .mapToDouble(value -> value)
- .sum())/10.0;
- }
- @Override
- public String toString() {
- return String.format("%s %s %.2f",
- index,
- (getsSignature())?"YES":"NO",
- getSummedPoints());
- }
- public Integer getYearStudy() {
- return (20-Integer.parseInt(index.substring(0,2)));
- }
- }
- class LabExercises {
- private List<Student> students;
- public LabExercises() {
- students = new ArrayList<>();
- }
- public void addStudent(Student student){
- students.add(student);
- }
- public void printByAveragePoints(boolean ascending, int n){
- if(ascending){
- students
- .stream()
- .sorted(Comparator.comparing(Student::getSummedPoints)
- .thenComparing(Student::getIndex))
- .limit(n)
- .forEach(System.out::println);
- }else {
- students
- .stream()
- .sorted(Comparator.comparing(Student::getSummedPoints)
- .thenComparing(Student::getIndex)
- .reversed())
- .limit(n)
- .forEach(System.out::println);
- }
- }
- public List<Student> failedStudents(){
- return students
- .stream()
- .filter(each -> !each.getsSignature())
- .sorted(Comparator
- .comparing(Student::getIndex)
- .thenComparing(Student::getSummedPoints))
- .collect(Collectors.toList());
- }
- public Map<Integer,Double> getStatisticsByYear(){
- return students
- .stream()
- .filter(Student::getsSignature)
- .collect(Collectors.groupingBy(
- Student::getYearStudy,
- Collectors.averagingDouble(Student::getSummedPoints)
- ));
- }
- }
- public class LabExercisesTest {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- LabExercises labExercises = new LabExercises();
- while (sc.hasNextLine()) {
- String input = sc.nextLine();
- String[] parts = input.split("\\s+");
- String index = parts[0];
- List<Integer> points = Arrays.stream(parts).skip(1)
- .mapToInt(Integer::parseInt)
- .boxed()
- .collect(Collectors.toList());
- labExercises.addStudent(new Student(index, points));
- }
- System.out.println("===printByAveragePoints (ascending)===");
- labExercises.printByAveragePoints(true, 100);
- System.out.println("===printByAveragePoints (descending)===");
- labExercises.printByAveragePoints(false, 100);
- System.out.println("===failed students===");
- labExercises.failedStudents().forEach(System.out::println);
- System.out.println("===statistics by year");
- labExercises.getStatisticsByYear().entrySet().stream()
- .map(entry -> String.format("%d : %.2f", entry.getKey(), entry.getValue()))
- .forEach(System.out::println);
- }
- }
- Sample input
- 152040 0 1 2 3 0 5 4 10
- 173071 10 0 0 3 0 5 3 10
- 181502 10 10 10 10 10 8 10 10 10 10
- 181507 10 10 10 10 10 10 10 10 9 10
- 181508 5 6 5 5 6 5 5 5 6
- 181509 3 8 6 3 0 0 4 5 1
- 181510 3 3 8 9 6 1 9 8 8
- 181513 2 10 10 8 9 10 10 7 2 8
- 181515 3 10 10 3 9 9 5 10 6 8
- 181517 3 2 5 2 0 2 1 1 1
- 181519 3 9 6 8 9 1 5 6 8
- 181521 2 10 8 0
- 181522 10 2 6 2 2 1 3 1
- 181523 8 10 10 8 10 10 10 10 10
- 181524 3 8 8 3 8 10 0 10 3 5
- 181526 2 2 2 2 1 3 2 1
- 181527 3 2 7 3 6 1 9 1
- 181530 2 6 4 7 1 5 0 5
- 181534 8 9 8 4 8 9 5 10 4
- 181536 10 10 8 7 8 10 5 10 7 10
- 181538 9 9 8 9 9 8 8 8 7 10
- 181540 2 4 1 4 4 1 1 1 1
- 181542 10 6 7 8 8 9 6 0
- 181545 0 8 0 8 10 6 10 3 5
- 181546 1 3 4 2 5 5 3 1 1
- 181547 6 2 2 4 2 2 5 4 2 1
- 181550 3 3 3 1 0 3 1 0
- 181552 6 2 0 2 2 3 1 1 1
- 181554 7 0 1 1 0 1 1
- 181555 10 3 4 2 2 2 3 3 2
- 181561 10 10 5 3 2 8 10 5 1
- 181563 10
- 181564 0 1 1 1 0 1 0 1
- 181567 0 1 1 0 2 1 1 8
- 181568 10 2 4 2 2 1 2 1
- 181569
- 181572 1 1 0 0 1 0
- 181574 6 2 5 2 0 2 2 3 1
- 181578 10 10 9 5 10 10 10 10 10
- 181580 10 10 10 10 10 10 9 10 9 9
- 181581 10 8 8 6 6 8 10 10 6
- 135042
- 161265 3 0 0 2 0
- 171221 10 5 7 10
- 171512 6 6
- 171527 10 1 1 1 0 2 1 1
- 171553 10 10 5 7 10 0 7 5 5
- 181501 10 10 10 9 10 10 10 10 10 10
- 181503 10 10 8 7 9 7 5 6 6 6
- 181504 10 10 10 10 9 9 9 10 9 10
- 181505 10 10 10 10 9 10 10 10 10 10
- 181506 10 4 5 8 9 2 5 5 8
- 181511 9 10 10 10 10 10 10 10 10 10
- 181512 9 10 10 10 10 10 10 10 10 10
- 181514 3 4 0 5 0 1 1 1
- 181516 3 1 0
- 181518 7 10 9 6 7 7 2 9 7 9
- 181520 7 9 7 7 6 10 5 8
- 181525 5 0 1 4 3 0 1 1
- 181529 3 10 9 6 9 10 10 10
- 181531 10 5 3 5 0 4 4 1
- 181533 6 5 6 5 5 4 1 6 5 6
- 181535 0 3 0 2 4 1
- 181537 3 0 5 7 4 5
- Sample output
- ===printByAveragePoints (ascending)===
- 135042 NO 0.00
- 181569 NO 0.00
- 181572 NO 0.30
- 181516 NO 0.40
- 161265 NO 0.50
- 181564 YES 0.50
- 181535 NO 1.00
- 181563 NO 1.00
- 181554 NO 1.10
- 171512 NO 1.20
- 181550 YES 1.40
- 181567 YES 1.40
- 181514 YES 1.50
- 181525 YES 1.50
- 181526 YES 1.50
- 171527 YES 1.70
- 181517 YES 1.70
- 181552 YES 1.80
- 181540 YES 1.90
- 181521 NO 2.00
- 181574 YES 2.30
- 181537 NO 2.40
- 181568 YES 2.40
- 152040 YES 2.50
- 181546 YES 2.50
- 181522 YES 2.70
- 181509 YES 3.00
- 181530 YES 3.00
- 181547 YES 3.00
- 173071 YES 3.10
- 181555 YES 3.10
- 171221 NO 3.20
- 181527 YES 3.20
- 181531 YES 3.20
- 181508 YES 4.80
- 181533 YES 4.90
- 181545 YES 5.00
- 181542 YES 5.40
- 181561 YES 5.40
- 181510 YES 5.50
- 181519 YES 5.50
- 181506 YES 5.60
- 181524 YES 5.80
- 171553 YES 5.90
- 181520 YES 5.90
- 181534 YES 6.50
- 181529 YES 6.70
- 181581 YES 7.20
- 181515 YES 7.30
- 181518 YES 7.30
- 181503 YES 7.40
- 181513 YES 7.60
- 181578 YES 8.40
- 181536 YES 8.50
- 181538 YES 8.50
- 181523 YES 8.60
- 181504 YES 9.60
- 181580 YES 9.70
- 181502 YES 9.80
- 181501 YES 9.90
- 181505 YES 9.90
- 181507 YES 9.90
- 181511 YES 9.90
- 181512 YES 9.90
- ===printByAveragePoints (descending)===
- 181512 YES 9.90
- 181511 YES 9.90
- 181507 YES 9.90
- 181505 YES 9.90
- 181501 YES 9.90
- 181502 YES 9.80
- 181580 YES 9.70
- 181504 YES 9.60
- 181523 YES 8.60
- 181538 YES 8.50
- 181536 YES 8.50
- 181578 YES 8.40
- 181513 YES 7.60
- 181503 YES 7.40
- 181518 YES 7.30
- 181515 YES 7.30
- 181581 YES 7.20
- 181529 YES 6.70
- 181534 YES 6.50
- 181520 YES 5.90
- 171553 YES 5.90
- 181524 YES 5.80
- 181506 YES 5.60
- 181519 YES 5.50
- 181510 YES 5.50
- 181561 YES 5.40
- 181542 YES 5.40
- 181545 YES 5.00
- 181533 YES 4.90
- 181508 YES 4.80
- 181531 YES 3.20
- 181527 YES 3.20
- 171221 NO 3.20
- 181555 YES 3.10
- 173071 YES 3.10
- 181547 YES 3.00
- 181530 YES 3.00
- 181509 YES 3.00
- 181522 YES 2.70
- 181546 YES 2.50
- 152040 YES 2.50
- 181568 YES 2.40
- 181537 NO 2.40
- 181574 YES 2.30
- 181521 NO 2.00
- 181540 YES 1.90
- 181552 YES 1.80
- 181517 YES 1.70
- 171527 YES 1.70
- 181526 YES 1.50
- 181525 YES 1.50
- 181514 YES 1.50
- 181567 YES 1.40
- 181550 YES 1.40
- 171512 NO 1.20
- 181554 NO 1.10
- 181563 NO 1.00
- 181535 NO 1.00
- 181564 YES 0.50
- 161265 NO 0.50
- 181516 NO 0.40
- 181572 NO 0.30
- 181569 NO 0.00
- 135042 NO 0.00
- ===failed students===
- 135042 NO 0.00
- 161265 NO 0.50
- 171221 NO 3.20
- 171512 NO 1.20
- 181516 NO 0.40
- 181521 NO 2.00
- 181535 NO 1.00
- 181537 NO 2.40
- 181554 NO 1.10
- 181563 NO 1.00
- 181569 NO 0.00
- 181572 NO 0.30
- ===statistics by year
- 2 : 5.38
- 3 : 3.57
- 5 : 2.50
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement