У меня есть ученики с оценками за три года, хранящиеся в таких массивах:
Код: Выделить всё
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},
{}
};
Вот что у меня есть, но это не дает правильных результатов:
Код: Выделить всё
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);
double median;
if ((end - start) % 2 == 0) {
median = (getLastMark(studentsWithMarks[end - 1]) + getLastMark(studentsWithMarks[start])) / 2.0;
} else {
median = getLastMark(studentsWithMarks[(start + end) / 2]);
}
double[] group = new double[end - start + 1];
group[0] = median;
for (int j = start; j < end; j++) {
group[j - start + 1] = studentsWithMarks[j];
}
groups.add(group);
index = end;
}
return groups;
}
public static void main(String[] args) {
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},
{}
};
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();
}
}
Код: Выделить всё
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]
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/786 ... ns-in-java