Я работаю над программой на Java, в которой у меня есть класс ClassGenerator, который управляет оценками учащихся с течением времени и должен разделить их на группы на основе равных медиан. Вот упрощенная версия того, чего я пытаюсь достичь:
У меня есть ученики с оценками за три года, хранящиеся в таких массивах:
Мне нужно реализовать метод равныхMediansGroups() в ClassGenerator, который делит учащихся на группы numGroups на основе их прошлогодних оценок, гарантируя, что каждая группа имеет примерно равные медианы.
Вот что у меня есть, но это не дает правильных результатов:
Group median: 20.0
Group students: [9.0, 8.0, 7.0]
Group median: 50.0
Group students: [6.0, 5.0, 4.0]
Group median: 80.0
Group students: [3.0, 2.0, 1.0]
Может кто-нибудь помочь мне понять, какие корректировки необходимы в моем методеqualMediansGroups() для достижения правильной группировки на основе равных медиан оценок учащихся с течением времени?
Спасибо!
Я работаю над программой на Java, в которой у меня есть класс ClassGenerator, который управляет оценками учащихся с течением времени и должен разделить их на группы на основе равных медиан. Вот упрощенная версия того, чего я пытаюсь достичь: У меня есть ученики с оценками за три года, хранящиеся в таких массивах: [code]int[] students = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; double[][] marksOverTime = { {80, 85, 90}, {70, 75, 80}, {60, 65, 70}, {50, 55, 60}, {40, 45, 50}, {30, 35, 40}, {20, 25, 30}, {10, 15, 20}, {0, 5, 10}, {} }; [/code] Мне нужно реализовать метод равныхMediansGroups() в ClassGenerator, который делит учащихся на группы numGroups на основе их прошлогодних оценок, гарантируя, что каждая группа имеет примерно равные медианы. Вот что у меня есть, но это не дает правильных результатов: [code]public List equalMediansGroups() { int[] studentsWithMarks = getStudentsWithMarks(); Arrays.sort(studentsWithMarks, Comparator.comparingDouble(this::getLastMark).reversed());
int groupSize = studentsWithMarks.length / numGroups; int remainder = studentsWithMarks.length % numGroups;
List groups = new ArrayList();
int index = 0; for (int i = 0; i < numGroups; i++) { int start = index; int end = start + groupSize + (i < remainder ? 1 : 0);
ClassGenerator classGenerator = new ClassGenerator(students, marksOverTime, 3); List groups = classGenerator.equalMediansGroups();
// Print groups for (double[] group : groups) { System.out.println("Group median: " + group[0]); System.out.println("Group students: " + Arrays.toString(Arrays.copyOfRange(group, 1, group.length))); System.out.println(); } } [/code] Результат, который я сейчас получаю, неудовлетворительный: [code]Group median: 20.0 Group students: [9.0, 8.0, 7.0]
Group median: 50.0 Group students: [6.0, 5.0, 4.0]
Group median: 80.0 Group students: [3.0, 2.0, 1.0] [/code] Может кто-нибудь помочь мне понять, какие корректировки необходимы в моем методеqualMediansGroups() для достижения правильной группировки на основе равных медиан оценок учащихся с течением времени? Спасибо!