Я работаю над программой на 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() для достижения правильной группировки на основе равных медиан последних оценок учащихся? Если есть новые ученики без оценок, их следует распределить равномерно по группам, поскольку они не влияют на медиану какой-либо группы. Спасибо!