java - Java 数组和引用
问题描述
作为我学校课程的一部分,我们正在开发一些 CodeHS Java。我遇到了一个问题:
以我们之前的学生和课堂示例为例,您应该填写方法 getMostImprovedStudent 以及方法 getExamRange。进步最大的学生是考试成绩范围最大的学生。
要计算考试分数范围,您必须从最高考试分数中减去最低考试分数。
例如,如果考试成绩为 90、75 和 84,则范围为 90 - 75 = 15。
这是我添加方法的 Student 类getExamRange()
。
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;
public static int[] examRange = new int[Classroom.numStudentsAdded];
private int i = 0;
/**
* 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);
examRange[i] = exams[exams.length-1] - exams[0];
i++;
return exams[exams.length-1] - exams[0];
}
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;
}
}
这是我在其中添加方法的 Classroom 类getMostImprovedStudent()
。
import java.util.*;
public class Classroom
{
Student[] students;
static int numStudentsAdded;
public Classroom(int numStudents)
{
students = new Student[numStudents];
numStudentsAdded = 0;
}
public Student getMostImprovedStudent()
{
Arrays.sort(Student.examRange);
//return Student.examRange[0];
}
public void addStudent(Student s)
{
students[numStudentsAdded] = s;
numStudentsAdded++;
}
public void printStudents()
{
for(int i = 0; i < numStudentsAdded; i++)
{
System.out.println(students[i]);
}
}
}
我可以通过对考试数组进行排序然后从最大数组中减去最小的来获得考试范围,但是一旦我这样做了,我如何找到考试范围最大的学生并将其返回?
解决方案
你会这样做的方式是循环students
,并有一个变量来保持分数的最大差异,以及进步最大的学生:
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;
}
但是 Java 8+ 我们可以这样做:
public Student getMostImprovedStudent()
{
return Arrays.stream(students)
.max(Comparator.comparing(Student::getExamRange))
.get();
}
假设它students
不为空
推荐阅读
- javascript - 使用 vanilla JavaScript,是否可以添加 DOM 元素并使用 CSS 过渡淡入,而不使用 setTimeout 或 CSS 动画?
- java - Eclipse RCP:导出示例 Eclipse 产品时出错
- python - 如何将列拆分为不同的向量
- flutter - 图片未显示在 ListView 中
- kubernetes-ingress - 如何在使用 Ocelot api 网关时将 JWT 令牌设置为 Stomp 标头
- c - 有人可以解释这块 linux 设备驱动程序代码中的 C 语法吗?
- python - 不和谐.py | 如何为成员添加角色?
- apache-spark - 合并两个数据框并从正确的数据框中检索所有信息
- python - Python将唯一字符串添加到数组中
- python - 如何在 Python for VSCODE 上使用交互式窗口中的变量启动调试会话?