Java数组和引用

Java数组和引用,java,arrays,Java,Arrays,作为我学校课程的一部分,我们正在编写一些Java代码。 有一个问题让我无法解决: 以前面的学生和课堂为例,您应该填写方法getMostImprovedStudent,以及方法getExamRange。进步最大的学生是考试分数范围最大的学生 要计算考试分数范围,必须从最高考试分数中减去最低考试分数 例如,如果考试分数为90、75和84,则范围为90-75=15 这是我添加了方法getExamRange()的学生类 这是课堂上我添加了方法getMostImprovedStudent() import

作为我学校课程的一部分,我们正在编写一些Java代码。 有一个问题让我无法解决:

以前面的学生和课堂为例,您应该填写方法getMostImprovedStudent,以及方法getExamRange。进步最大的学生是考试分数范围最大的学生

要计算考试分数范围,必须从最高考试分数中减去最低考试分数

例如,如果考试分数为90、75和84,则范围为90-75=15

这是我添加了方法
getExamRange()
的学生类

这是课堂上我添加了方法
getMostImprovedStudent()

import java.util.*;
公共课堂
{
学生[]学生;
静态整数numStudentsAdded;
公共教室(国际学生)
{
学生=新生[numstudent];
numStudentsAdded=0;
}
公立学生获得最优惠学生()
{
数组.sort(Student.examRange);
//返回学生。examRange[0];
}
公立学校学生(学生)
{
学生[numStudentsAdded]=s;
numStudentsAdded++;
}
公立学校学生()
{
for(int i=0;i

我可以通过对考试数组进行排序,然后从最大的数组中减去最小的数组来获得考试范围,但一旦我这样做,我如何找到考试范围最大的学生并返回它?

正如我在上面的评论中所解释的,您可以这样做:

  public Student getMostImprovedStudent() {
    Student maxRangeStudent = null;
    int maxRange = 0;
    for (Student student: students) {
      int curExamRange = student.getExamRange();
      if (curExamRange > maxRange){
        maxRangeStudent = student;
        maxRange = curExamRange;
      }
    }

    return maxRangeStudent;
  }

这样做的方式是在
学生中循环,并有一个变量来保持分数的最大差异和最进步的学生:

public Student getMostImprovedStudent()
{
    Student mostImproved = students[0];
    int biggest = student[i].getExamRange();
    for(int i = 1; i < students.length; i++) {
        if(students[i].getExamRange() > biggest) {
            mostImproved = students[i];
            biggest = students[i].getExamRange();
        }
    }
    return mostImproved;
}

假设
students
不是空的

最简单的方法就是在students数组上循环,为每个学生调用getExamRange(),跟踪最大考试范围和拥有此最大值的学生对学生数组中的每个学生调用getExamRange(),然后将最大值作为变量进行跟踪
examRange
i
中的
Student
字段对我来说没有意义。学生应该只知道如何计算他们的考试范围,而不是维护所有学生考试范围的数组。另外,
学生可以对考试进行排序吗?顺序重要吗(考试的顺序)?看起来您应该排序数组的副本,而不是原始数组。
  public Student getMostImprovedStudent() {
    Student maxRangeStudent = null;
    int maxRange = 0;
    for (Student student: students) {
      int curExamRange = student.getExamRange();
      if (curExamRange > maxRange){
        maxRangeStudent = student;
        maxRange = curExamRange;
      }
    }

    return maxRangeStudent;
  }
public Student getMostImprovedStudent()
{
    Student mostImproved = students[0];
    int biggest = student[i].getExamRange();
    for(int i = 1; i < students.length; i++) {
        if(students[i].getExamRange() > biggest) {
            mostImproved = students[i];
            biggest = students[i].getExamRange();
        }
    }
    return mostImproved;
}
public Student getMostImprovedStudent()
{
    return Arrays.stream(students)
                 .max(Comparator.comparing(Student::getExamRange))
                 .get();                     
}