Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.11.2020
Сообщений: 32

Создать класс Группа, содержащая два массива - Имена и Оценки

05.05.2021, 12:24. Показов 2289. Ответов 14
Метки java (Все метки)

Студворк — интернет-сервис помощи студентам
Создать класс Группа, содержащая два массива - Имена и Оценки. Должны быть методы Добавить_Студента (String name, double ocinka). Должна быть статическая переменная - элемент класса double Prohidnij_Bal и соответствующая статическая функция-метод, который устанавливает её значение. Напишите функцию, которая вернет созданную новую группу, которая содержит только тех студентов, которые имеют оценку более проходного балла. Продемонстрировать глубинное копирования (Cloneable) объекта класса Группа.
Для Группы следует заменить toString чтобы она выводила студентов. Сделать так, чтобы класс Группа реализовывал интерфейс Comparable, который сравнивал бы Группы по Средним_балом (и чтобы код, который его обсчитывает!)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2021, 12:24
Ответы с готовыми решениями:

Дано: группа студентов, которая состоит из 6 человек. Анкетные данные: фамилия имя отчество, оценки за последнюю сессию. Создать однонаправленный спис
Дано: группа студентов, которая состоит из 6 человек. Анкетные данные: фамилия имя отчество, оценки за последнюю сессию. Создать...

Создать класс “Специальность ”, состоящей из класса ” Группа”
Создать класс “Специальность ”, состоящей из класса ” Группа”. Класс “Специальность”: название специальности, количество групп. Класс...

Разработать класс, набор методов. Объект «таблица содержащая два столбца - номер телефона и фамилию абонента»
Разработать класс, набор методов (конструктор, деструктор и указаны методы) для программной модели заданного объекта. Описание объекта и...

14
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
05.05.2021, 13:34
А что непонятно-то?
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
05.05.2021, 13:48
Я вертел делать это на массивах, поэтому сделал как положено:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
public class Group implements Cloneable, Comparable<Group> {
    private static double passingScore;
 
    private List<String> studentNames;
 
    private List<Double> studentScores;
 
    public Group() {
        this.studentNames = new ArrayList<>();
        this.studentScores = new ArrayList<>();
    }
 
    public Group(Group other) {
        this.studentNames = other.getStudentNames();
        this.studentScores = other.getStudentScores();
    }
 
    public void addStudent(String name, double score) {
        studentNames.add(name);
        studentScores.add(score);
    }
 
    public List<String> getStudentNames() {
        return Collections.unmodifiableList(studentNames);
    }
 
    public List<Double> getStudentScores() {
        return Collections.unmodifiableList(studentScores);
    }
 
    public double getAverage() {
        return studentScores.stream()
                .mapToDouble(i -> i)
                .average()
                .getAsDouble();
    }
 
    @Override
    public String toString() {
        StringJoiner joiner = new StringJoiner("\n", "Students:\n", "\n");
 
        for (int i = 0; i < studentNames.size(); i++) {
            String studentName = studentNames.get(i);
            double studentScore = studentScores.get(i);
 
            joiner.add(studentName + " : " + studentScore);
        }
 
        return "Group:\n" +
                "  passing score: " + passingScore + '\n' +
                joiner;
    }
 
    @Override
    protected Object clone() throws CloneNotSupportedException {
        try {
            return super.clone();
        } catch (CloneNotSupportedException e) {
            return new Group(this);
        }
    }
 
    @Override
    public int compareTo(Group other) {
        return Double.compare(this.getAverage(), other.getAverage());
    }
 
    public static void setPassingScore(double passingScore) {
        Group.passingScore = passingScore;
    }
 
    public static double getPassingScore() {
        return passingScore;
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class Main {
    public static void main(String[] args) throws CloneNotSupportedException {
        Group.setPassingScore(3.50);
 
        Group group = new Group();
        group.addStudent("Ivanov", 3.22);
        group.addStudent("Petrov", 4.91);
        group.addStudent("Kozlov", 3.79);
 
        Group clone = (Group) group.clone();
 
        System.out.println(group);
        System.out.println(clone);
 
        Group passingGroup = getPassingGroup(clone);
 
        System.out.println(passingGroup);
 
        System.out.println(group.compareTo(passingGroup));
    }
 
    private static Group getPassingGroup(Group source) throws CloneNotSupportedException {
        Map<String, Double> map = filterByPassingScore(createMap(source.getStudentNames(), source.getStudentScores()));
 
        Group result = new Group();
 
        map.forEach(result::addStudent);
 
        return result;
    }
 
    private static Map<String, Double> createMap(List<String> names, List<Double> scores) {
        return IntStream.range(0, names.size())
                .boxed()
                .collect(toMap(names::get, scores::get));
    }
 
    private static Map<String, Double> filterByPassingScore(Map<String, Double> map) {
        return map.entrySet().stream()
                .filter(entry -> entry.getValue() >= Group.getPassingScore())
                .collect(toMap(Map.Entry::getKey, Map.Entry::getValue));
    }
}
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
05.05.2021, 14:07
А че там сложного-то на массивах сделать?
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import java.util.Arrays;
 
class Student {
    private String name;
    private double score;
 
    public Student() {
        this("Иван", 0);
    }
 
    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public double getScore() {
        return score;
    }
 
    public void setScore(int score) {
        this.score = score;
    }
 
    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("Student{");
        sb.append("name='").append(name).append('\'');
        sb.append(", score=").append(score);
        sb.append('}');
        return sb.toString();
    }
}
 
class Group implements Cloneable, Comparable<Group> {
    private Student[] array;
    private static double passingScore = 0;
 
    public Group() {
        this(new Student[0]);
    }
 
    public Group(Student... array) {
        this.array = array;
    }
 
    public static void setPassingScore(double passingScore) {
        Group.passingScore = passingScore;
    }
 
    public static double getPassingScore() {
        return passingScore;
    }
 
    public void addAll(Student... students) {
        Student[] copyArr = new Student[array.length + students.length];
        System.arraycopy(array, 0, copyArr, 0, array.length);
        System.arraycopy(students, 0, copyArr, array.length, students.length);
        array = copyArr;
    }
 
    public void clear() {
        array = new Student[0];
    }
 
    public Group getPassedGroup() {
        return new Group(Arrays.stream(array).filter(student -> student.getScore() > passingScore).toArray(Student[]::new));
    }
 
    public Student[] getArray() {
        return array.clone();
    }
 
    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("Group{");
        sb.append("array=").append(Arrays.toString(array));
        sb.append('}');
        return sb.toString();
    }
 
    @Override
    protected Object clone() throws CloneNotSupportedException {
        super.clone();
        return new Group(array);
    }
 
    @Override
    public int compareTo(Group group) {
        return Double.compare(Arrays.stream(array).count() / (double) (array.length),
                Arrays.stream((group.array)).count() / (double) (array.length));
    }
}
 
public class Main {
    public static void main(String[] args) throws CloneNotSupportedException {
        Group.setPassingScore(100);
        Group group = new Group();
        group.addAll(new Student("1", 50), new Student("2", 100), new Student("3", 150), new Student("4", -10), new Student());
        Group cloneGroup = (Group) group.clone();
        cloneGroup.clear();
        cloneGroup.addAll(group.getPassedGroup().getArray());
        System.out.println("Изначальная группа: " + group);
        System.out.println("Прошедшая группа: " + cloneGroup);
    }
}


Добавлено через 14 минут
Хотя compareTo я неправильно написал(
Проще и правда применить готовую реализацию.
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
@Override
public int compareTo(Group group) {
        return Double.compare(Arrays.stream(array).mapToDouble(Student::getScore).average().getAsDouble(),
            Arrays.stream(group.array).mapToDouble(Student::getScore).average().getAsDouble());
}
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
05.05.2021, 14:31
Я второпях накосячил в 2х местах.
1) поправить клон на:
Java
1
2
3
4
@Override
protected Object clone() throws CloneNotSupportedException {
        return new Group(this);
}
2) поправить конструктор копирования на:
Java
1
2
3
4
public Group(Group other) {
        studentNames = new ArrayList<>(other.getStudentNames());
        studentScores = new ArrayList<>(other.getStudentScores());
}
Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от Coffeini Посмотреть сообщение
А че там сложного-то на массивах сделать?
Ну у тс-а по условию должно быть два массива, а не как у вас. Ну и ресайзить это все на каждом адде который тоже по условию... ну лень мне :D

0
95 / 66 / 30
Регистрация: 22.11.2019
Сообщений: 245
05.05.2021, 14:42
Group.java

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package com.example.studentgroup;
 
import androidx.annotation.NonNull;
 
import java.util.ArrayList;
 
public class Group implements Comparable, Cloneable {
    public Group() {
    }
 
    static private double prohodnoy_ball = 21.5; // статичная переменная проходного балла (базовая для всех)
 
 
    /*
    почему в задании написано 2 массива, если можно сделать одним Map<K, V> - непонятно.
    так и проще и лучше. ну ладно...
     */
    private ArrayList<String> names = new ArrayList<>(); // массив имен
    private ArrayList<Double> ball = new ArrayList<>(); // массив балов
 
 
    @Override
    public String toString() {
 
        /*
        красивый toString группы.
        т.к. в задании 2 массива, нам приходится всю дорогу сопостовлять ИМЯ и ОЦЕНКУ по ID в массивах
         */
        String ret = "Group { ";
        for (int i = 0; i < names.size(); i++) {
            ret += names.get(i) + " = " + ball.get(i) + "; ";
        }
        ret += "средний балл = " + this.sr_ball(); // заодно посчитаем средний балл
        ret += " }";
        return ret;
 
 
    }
 
    // добавление студента
    public void add_student(String s, Double d) {
        names.add(s);
        ball.add(d);
    }
 
    // удаление студента по имена без учета регистра
    public void del_student(String name) {
        int x = 0;
 
        for (String i : names) { // перебираем все имена в массиве
            if (i.equalsIgnoreCase(name)) { // и если есть воспадение без учета регистра
                x = names.indexOf(i); // узнаем его ID
                names.remove(x); // и удалим ИМЯ по ID
                ball.remove(x); // и ОЦЕНКУ по ID
                return; // дальше не ищем. выходим из перебора
            }
        }
    }
 
 
    public Group new_semestr() {
        Group new_gropup = new Group(); // создаем новую пустую группу
        for (int i = 0; i < ball.size(); i++) { // перебираем текущую по оценкам
            if (ball.get(i) >= prohodnoy_ball) { // если оценка больше проходного балла
                new_gropup.add_student(names.get(i), ball.get(i)); // в новую группу добавляем этого студента
            }
        }
        return new_gropup;
    }
 
 
    // новый проходной балл
    static public void new_prohodnou_ball(double a) {
        prohodnoy_ball = a;
    }
 
 
    // средний балл. используется только внутри класса для сортировка и метода toString()
    private double sr_ball() {
        double s = 0;
        for (double d : ball) {
            s += d;
        }
        s /= ball.size();
        return s;
    }
 
 
    // сортировка
    @Override
    public int compareTo(Object o) {
        Group g = (Group) o;
        if (this.sr_ball() > g.sr_ball()) return -1;
        else if (this.sr_ball() < g.sr_ball()) return 1;
        else return 0;
    }
 
 
    // клонирование
    @NonNull
    @Override
    protected Group clone() {
        Group g = new Group();
        g.names.addAll(this.names);
        g.ball.addAll(this.ball);
        return g;
    }
}


Main.java

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
        // создание и вывод группы студентов и их оценок
        Group group = new Group();
        group.add_student("Wasya", 52.2);
        group.add_student("Misha", 14.7);
        group.add_student("Kostya", 9.0);
        group.add_student("Wlad", 30.7);
        group.add_student("Uber", 18.2);
        Log.e("!!!!", "Создание группы студентов");
        Log.e("!!!!", "" + group);
        Log.e("!!!!", "....................");
 
 
        // удаление студента по имени, без учета регистра
        group.del_student("uber");
        group.del_student("wLAd");
        Log.e("!!!!", "удаление студента по имени, без учета регистра");
        Log.e("!!!!", "" + group);
        Log.e("!!!!", "....................");
        // добавим удаленных назад
        group.add_student("Wlad", 30.7);
        group.add_student("Uber", 18.2);
 
 
        // создание новой группы, на основе проходного балла
        Group b = group.new_semestr();
        Log.e("!!!!", "создание новой группы, на основе проходного балла");
        Log.e("!!!!", "" + b.toString());
        Log.e("!!!!", "....................");
 
        // изменение проходного балла для всех
        Group.new_prohodnou_ball(10); // между этими двумя строчками разницы нет
        Group c = group.new_semestr();
        Log.e("!!!!", "изменение проходного балла для всех");
        Log.e("!!!!", "" + c.toString());
        Log.e("!!!!", "....................");
 
 
        // сортировка массива групп от лучшей к худшей (по оценкам)
        ArrayList<Group> arr = new ArrayList<>();
        arr.add(group);
        arr.add(b);
        arr.add(c);
        Log.e("!!!!", "сортировка массива групп от лучшей к худшей (по оценкам)");
        Log.e("!!!", "" + arr);
        Collections.sort(arr);
        Log.e("!!!", "" + arr);
        Log.e("!!!!", "....................");
 
 
        // клонирование объекта
        Group group1 = group.clone();
        group1.add_student("rrr", 88.4);
        Log.e("!!!!", "клонирование объекта ");
        Log.e("!!!!", "" + group);
        Log.e("!!!!", "" + group1);
        Log.e("!!!!", "....................");
0
05.05.2021, 15:12

Не по теме:

Цитата Сообщение от HighPredator Посмотреть сообщение
1) поправить клон на:
А разве вызов суперметода не нужон?
Цитата Сообщение от HighPredator Посмотреть сообщение
должно быть два массива
Как по мне глупое условие...

0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
05.05.2021, 15:21
Цитата Сообщение от Coffeini Посмотреть сообщение
А разве вызов суперметода не нужон?
Да по идее да надо бы по Блоху сделать. Оригинал работал неверно, так что я оставил чисто на конструкторе копирования. Будет минута -- сделаю по-человечески.
Цитата Сообщение от Coffeini Посмотреть сообщение
Как по мне глупое условие...
No arguments here
0
05.05.2021, 16:23

Не по теме:

Цитата Сообщение от HighPredator Посмотреть сообщение
protected Object clone() throws CloneNotSupportedException {
Чет не очень: имплементировать интерфейс Cloneable и не расширять область видимости (до public) у соответствующего переопределенного метода.

0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
05.05.2021, 16:27
Arsegg, у clone() вообще все не очень из коробки. В общем вот если делать по Блоху, то надо так:
1) выкинуть конструктор копирования
2) переделать клон так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
@Override
public Group clone() {
    try {
        Group clone = (Group) super.clone();
            
        clone.studentNames = new ArrayList<>(this.studentNames);
        clone.studentScores = new ArrayList<>(this.studentScores);
 
        return clone;
    } catch (CloneNotSupportedException e) {
        throw new AssertionError();
    }
}
2
05.05.2021, 16:28

Не по теме:

Arsegg, а можете объяснить для чего расширять область видимости? Просто очень интересно узнать причину...

0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
05.05.2021, 16:31
Цитата Сообщение от Coffeini Посмотреть сообщение
для чего расширять область видимости? Просто очень интересно узнать причину...
Ну хотя бы чтобы тестами покрыть можно было к примеру. Да и формально метод-то для публичного использования.
1
05.05.2021, 16:34

Не по теме:

Цитата Сообщение от Coffeini Посмотреть сообщение
а можете объяснить для чего расширять область видимости? Просто очень интересно узнать причину...
Переложи в другой пакет - все сломается. Это ж protected. Хотя опять же имхо.


Не по теме:

Цитата Сообщение от HighPredator Посмотреть сообщение
Ну хотя бы чтобы тестами покрыть можно было к примеру.
Тестами покрыть вообще не проблема: создаешь класс в аналогичном пакете - доступ-то к методу clone никуда не пропадет.
Хотя тут вопрос целесообразности.

0
05.05.2021, 16:47

Не по теме:

Цитата Сообщение от Arsegg Посмотреть сообщение
создаешь класс в аналогичном пакете
Это такое... у меня строение пакетов в тестах никогда не совпадает.

0
05.05.2021, 20:30

Не по теме:

Цитата Сообщение от HighPredator Посмотреть сообщение
Это такое... у меня строение пакетов в тестах никогда не совпадает.
Хз, в Идее Alt + Insert никогда не создаст Unit-тест класса в другом пакете, если специально его (пакет) не поменять. Хотя могу ошибаться.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.05.2021, 20:30
Помогаю со студенческими работами здесь

Дан список учеников и оценки по трем предметам. Вывести фамилии и имена учеников по убыванию средней оценки
Добрый день! Помогите, пожалуйста, решить задачу Дан список учеников (фамилия, имя) и оценки по трем предметам. Вывести фамилии и имена...

Создать класс Date – дата, содержащая поля: день, месяц, год.
Создать класс Date – дата, содержащая поля: день, месяц, год. Определить операторы &quot;+&quot; и &quot;-&quot;, как методы класса, а...

Создать класс c полями группа, фамилия студента и стипендия. Вычислить 1% от стипендии
Здравствуйте! Нужно создать класс c полями группа, фамилия студента и стипендия. Вычислить 1% от стипендии, который он должен внести в...

Создать класс, соержащий информацию о студентах: ФИО и 4 оценки
Создать класс, соержащий информацию о студентах: ФИО и 4 оценки. С помощью свойств ограничить ввод оценок 2-5 баллами. Найти студентов,...

Создать запись ученика ФИО, класс, лидера класса, оценки и выбраnm отличника
создать запись ученика ФИО, класс, лидера класса, оценки по математике, физике, химии, посмотреть файл и выбрать отличника в 7...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru