Java 查找最高考试范围的问题

Java 查找最高考试范围的问题,java,Java,我有一个作业,要求我创建一个名为getExamRange的方法,该方法查看一个数组,其中包括几个学生的考试分数,取最低和最高分数,并从最高考试分数中减去最低考试分数。我还必须创建一个getMostImprovedStudent,它在一个学生数组上运行getExamRange方法,并返回具有最高考试范围的学生。当代码运行时,我很难得到正确的结果。是什么导致了这个问题 下面是Student.java类的代码: import java.util.*; public class Student {

我有一个作业,要求我创建一个名为getExamRange的方法,该方法查看一个数组,其中包括几个学生的考试分数,取最低和最高分数,并从最高考试分数中减去最低考试分数。我还必须创建一个getMostImprovedStudent,它在一个学生数组上运行getExamRange方法,并返回具有最高考试范围的学生。当代码运行时,我很难得到正确的结果。是什么导致了这个问题

下面是Student.java类的代码:

import java.util.*;
public class Student
{
    private static final int NUM_EXAMS = 4;

    private String firstName;
    private String lastName;
    private int gradeLevel;
    private double gpa;

    private int[] exams;
    private int numExamsTaken;

    /**
     * This is a constructor.  A constructor is a method
     * that creates an object -- it creates an instance
     * of the class. What that means is it takes the input
     * parameters and sets the instance variables (or fields)
     * to the proper values.
     * 
     * Check out StudentTester.java for an example of how to use
     * this constructor. 
     */
    public Student(String fName, String lName, int grade)
    {
        firstName = fName;
        lastName = lName;
        gradeLevel = grade;
        exams = new int[NUM_EXAMS];
        numExamsTaken = 0;
    }

    public int getExamRange()
    {
        Arrays.sort(exams);
        int examScore1 = exams[0];
        int examScore2 = 0;
        int lastPos = 0;
        for(int i = 0; i < exams.length - 1; i++)
        {
            lastPos++;
        }
        examScore2 = exams[lastPos];
        return examScore2 - examScore1;
    }

    public String getName()
    {
        return firstName + " " + lastName;
    }

    public void addExamScore(int score)
    {
        exams[numExamsTaken] = score;
        numExamsTaken++;
    }

    // This is a setter method to set the GPA for the Student.
    public void setGPA(double theGPA)
    {
        gpa = theGPA;
    }

    /**
     * This is a toString for the Student class. It returns a String
     * representation of the object, which includes the fields
     * in that object.
     */
    public String toString()
    {
        return firstName + " " + lastName + " is in grade: " + gradeLevel;
    }
}
public class Classroom
{
    Student[] students;
    int numStudentsAdded;


    public Classroom(int numStudents)
    {
        students = new Student[numStudents];
        numStudentsAdded = 0;
    }

    public Student getMostImprovedStudent()
    {
        int highestScore = 0;
        int score = 0;
        int location = 0;
        int finalLocation = 0;
        for(Student s: students)
        {
            score = s.getExamRange();
            location++;
            if(score > highestScore)
            {
                highestScore = score;
                finalLocation = location;
            }
        }
        return students[finalLocation - 1];
    }

    public void addStudent(Student s)
    {
        students[numStudentsAdded] = s;
        numStudentsAdded++;
    }

    public void printStudents()
    {
        for(int i = 0; i < numStudentsAdded; i++)
        {
            System.out.println(students[i]);
        }
    }
}
import java.util.*;
公立班学生
{
私人静态最终整数考试=4;
私有字符串名;
私有字符串lastName;
私家一级;
私人双gpa;
私人考试;
努梅克斯塔克私人酒店;
/**
*这是一个构造函数。构造函数是一个方法
*它创建了一个对象--它创建了一个实例
*这意味着它接受输入
*参数并设置实例变量(或字段)
*以达到适当的值。
* 
*查看StudentTester.java以了解如何使用
*这个构造函数。
*/
公立学生(字符串fName、字符串lName、整数年级)
{
firstName=fName;
lastName=lName;
等级=等级;
考试=新的整数[NUM_考试];
Numexamstake=0;
}
public int getExamRange()
{
数组。排序(检查);
int examcore1=考试[0];
int examcore2=0;
int-lastPos=0;
对于(int i=0;i
下面是教室.java类的代码:

import java.util.*;
public class Student
{
    private static final int NUM_EXAMS = 4;

    private String firstName;
    private String lastName;
    private int gradeLevel;
    private double gpa;

    private int[] exams;
    private int numExamsTaken;

    /**
     * This is a constructor.  A constructor is a method
     * that creates an object -- it creates an instance
     * of the class. What that means is it takes the input
     * parameters and sets the instance variables (or fields)
     * to the proper values.
     * 
     * Check out StudentTester.java for an example of how to use
     * this constructor. 
     */
    public Student(String fName, String lName, int grade)
    {
        firstName = fName;
        lastName = lName;
        gradeLevel = grade;
        exams = new int[NUM_EXAMS];
        numExamsTaken = 0;
    }

    public int getExamRange()
    {
        Arrays.sort(exams);
        int examScore1 = exams[0];
        int examScore2 = 0;
        int lastPos = 0;
        for(int i = 0; i < exams.length - 1; i++)
        {
            lastPos++;
        }
        examScore2 = exams[lastPos];
        return examScore2 - examScore1;
    }

    public String getName()
    {
        return firstName + " " + lastName;
    }

    public void addExamScore(int score)
    {
        exams[numExamsTaken] = score;
        numExamsTaken++;
    }

    // This is a setter method to set the GPA for the Student.
    public void setGPA(double theGPA)
    {
        gpa = theGPA;
    }

    /**
     * This is a toString for the Student class. It returns a String
     * representation of the object, which includes the fields
     * in that object.
     */
    public String toString()
    {
        return firstName + " " + lastName + " is in grade: " + gradeLevel;
    }
}
public class Classroom
{
    Student[] students;
    int numStudentsAdded;


    public Classroom(int numStudents)
    {
        students = new Student[numStudents];
        numStudentsAdded = 0;
    }

    public Student getMostImprovedStudent()
    {
        int highestScore = 0;
        int score = 0;
        int location = 0;
        int finalLocation = 0;
        for(Student s: students)
        {
            score = s.getExamRange();
            location++;
            if(score > highestScore)
            {
                highestScore = score;
                finalLocation = location;
            }
        }
        return students[finalLocation - 1];
    }

    public void addStudent(Student s)
    {
        students[numStudentsAdded] = s;
        numStudentsAdded++;
    }

    public void printStudents()
    {
        for(int i = 0; i < numStudentsAdded; i++)
        {
            System.out.println(students[i]);
        }
    }
}
公共课堂
{
学生[]学生;
国际学生会;
公共教室(国际学生)
{
学生=新生[numstudent];
numStudentsAdded=0;
}
公立学生获得最优惠学生()
{
int最高分=0;
智力得分=0;
int位置=0;
int finalLocation=0;
(学生:学生)
{
分数=s.getExamRange();
位置++;
如果(分数>最高分数)
{
最高分数=分数;
最终分配=地点;
}
}
留学生[最终分配-1];
}
公立学校学生(学生)
{
学生[numStudentsAdded]=s;
numStudentsAdded++;
}
公立学校学生()
{
for(int i=0;i
以下是分配的说明,说明了这些方法应该做什么:

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

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


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

首先让我们看看getExamRange函数

public int getExamRange(){
        if(exams == null ||exams.length == 0){
           return 0;
         }
        int min = exams[0];
        int max = exams[0];
        for (int i : exams
             ) {
            if(i<min){
                min=i;
            }
            if(i>max){
                max=i;
            }
        }
        return max - min;
    }
public int getExamRange(){
如果(检查==null | |检查.长度==0){
返回0;
}
int min=考试[0];
int max=考试[0];
对于(int i:考试)
) {
if(imax){
max=i;
}
}
返回最大-最小值;
}
现在是getMostImprovedStudent

public Student getMostImprovedStudent()
    {
        if(students == null ||students[0] == null || students.length=0){
           return null;
        }
        int highestScore = students[0].getExamRange();
        int score = 0;
        Student mostImprovedStudent = students[0]
        for(int i=0;i<students.length;i++)
        {
            if(students[i]!=null){
               score = students[i].getExamRange();
            if(score > highestScore)
            {
                highestScore = score;
                mostImprovedStudent = students[i];
            }
          }

        }
        return mostImprovedStudent;
    }
public Student getMostImprovedStudent()
{
if(students==null | | students[0]==null | | students.length=0){
返回null;
}
int highestScore=学生[0]。getExamRange();
智力得分=0;
Student mostImprovedStudent=学生[0]
对于(int i=0;i最高分)
{
最高分数=分数;
mostImprovedStudent=学生[i];
}
}
}
返回最优秀的学生;
}

您的输入是什么?你的产出是什么?你的预期产量是多少?它们有何不同?我的学校使用一个自动输入值并创建学生和教室对象的系统,但它只显示预期输出和实际输出的结果,而不显示输入。嘿@pcgamer235132试试下面我写的代码这不起作用,“检查范围”方法显示错误的值其中一个测试使用不完整的Student数组创建一个类,该数组显示错误“NullPointerException:您似乎引用了一个为null的变量”它仍然输出相同的错误:/I将编辑我的帖子以包括作业的方向,也许这会有帮助。请立即尝试@pcgamer2315132getMostImprovedStudent()现在可以正常工作,但getExamRange()仍然不能正常工作请记住,它现在显示的结果是正确的,我只需要对getExamRange()代码做一些小的更改,谢谢。