Java 如何在数组列表中找到排名靠前的学生的姓名?

Java 如何在数组列表中找到排名靠前的学生的姓名?,java,Java,我正在学习Java,被要求生成一些方法,这些方法可以用来根据输入的学生姓名和分数收集统计数据。我已经计算出了如何计算最高分数,但我需要做的是返回获得最高分数的学生的姓名,我该怎么做?我想我可以尝试在最高int之前返回字符串,但我不确定如何返回 编辑:只是想说明一下,当前,当输入数据后在控制台中输入END时,返回最高分数-我需要返回最佳学生的分数 import java.util.*; public class Course { private ArrayList<Student&

我正在学习Java,被要求生成一些方法,这些方法可以用来根据输入的学生姓名和分数收集统计数据。我已经计算出了如何计算最高分数,但我需要做的是返回获得最高分数的学生的姓名,我该怎么做?我想我可以尝试在最高int之前返回字符串,但我不确定如何返回

编辑:只是想说明一下,当前,当输入数据后在控制台中输入END时,返回最高分数-我需要返回最佳学生的分数

import java.util.*;

public class Course {
    private ArrayList<Student> people = new ArrayList<Student>();
    private int passing = 0;
    private int failing = 0;
    private int top = Integer.MIN_VALUE;
    private int sum = 0;

    public void add( Student student ) {
        people.add( student );
        if(student.getMark() >= 40){
            passing++;
        }
        else {
            failing++;
        }
        sum += student.getMark();
        if(student.getMark() > top) {
            top = student.getMark();
        }
    }

    public int pass() {
        return passing;
    }

    public int fail() {
        return failing;
    }

    public int top() {
        return top;
    }

    public double average() {
        return sum / people.size();
    }
}
import java.util.*;
公共课{
private ArrayList people=new ArrayList();
私有整数传递=0;
私有整数=0;
private int top=Integer.MIN_值;
私有整数和=0;
公共无效添加(学生){
添加(学生);
如果(student.getMark()>=40){
通过++;
}
否则{
失败的++;
}
sum+=student.getMark();
if(student.getMark()>top){
top=student.getMark();
}
}
公共整数通行证(){
回传;
}
公共整数失败(){
返回失败;
}
公共int top(){
返回顶部;
}
公众双倍平均{
返回总和/人。大小();
}
}
谢谢你的帮助

更新:BinaryJudy,我按照你说的做了,但是我的名字出现了一个“NoSuchMethod”错误,我将代码改为:

import java.util.*;

public class Course {
    private ArrayList<Student> people = new ArrayList<Student>();
    private int passing = 0;
    private int failing = 0;
    private int top = Integer.MIN_VALUE;
    private int sum = 0;
    private String topName;

    public void add( Student student ) {
        people.add( student );
        if(student.getMark() >= 40){
            passing++;
        }
        else {
            failing++;
        }
        sum += student.getMark();
        if(student.getMark() > top) {
            top = student.getMark();
        }

        if(student.getMark() > top) {
            top = student.getMark();
            topName = student.getName();
        }
    }

    public int pass() {
        return passing;
    }

    public int fail() {
        return failing;
    }

    public String top() {
        return topName;
    }

    public double average() {
        return sum / people.size();
    }
}
import java.util.*;
公共课{
private ArrayList people=new ArrayList();
私有整数传递=0;
私有整数=0;
private int top=Integer.MIN_值;
私有整数和=0;
私有字符串topName;
公共无效添加(学生){
添加(学生);
如果(student.getMark()>=40){
通过++;
}
否则{
失败的++;
}
sum+=student.getMark();
if(student.getMark()>top){
top=student.getMark();
}
if(student.getMark()>top){
top=student.getMark();
topName=student.getName();
}
}
公共整数通行证(){
回传;
}
公共整数失败(){
返回失败;
}
公共字符串top(){
返回topName;
}
公众双倍平均{
返回总和/人。大小();
}
}

知道为什么吗?:)

请注意,您存储的是一群学生,我认为他们每个人都有课程分数。你所需要做的就是循环浏览这个Arraylist,找出谁的分数最高,然后返回那个学生

import java.util.*;

public class Course {
    private ArrayList<Student> people = new ArrayList<Student>();
    private int passing = 0;
    private int failing = 0;
    private int top = Integer.MIN_VALUE;
    private int sum = 0;

    public void add( Student student ) {
        people.add( student );
        if(student.getMark() >= 40){
            passing++;
        }
        else {
            failing++;
        }
        sum += student.getMark();
        if(student.getMark() > top) {
            top = student.getMark();
        }
    }

    public int pass() {
        return passing;
    }

    public int fail() {
        return failing;
    }

    public int top() {
        return top;
    }

    public double average() {
        return sum / people.size();
    }
}
像这样的东西可能适合你:

public String topStu(ArrayList<Student> list) { // take in any list of students
    int topStudentScore = 0; // default value
    Student topStudent = null;
    for (student x : list) { // cycle through all students in the list
        if (x.getMark() > topStudentScore) { // if the score is higher than the current listed score
            topStudentScore = x.getMark(); // update the top score
            topStudent = x; // update top student
        }
    }
    return topStudent.getName(); // return his name
}
publicstringtopstu(arraylistlist){//接收任何学生列表
int topStudentScore=0;//默认值
Student-topStudent=null;
对于(学生x:list){//遍历列表中的所有学生
如果(x.getMark()>topStudentScore){//如果分数高于当前列出的分数
topStudentScore=x.getMark();//更新最高分
topStudent=x;//更新顶尖学生
}
}
return topStudent.getName();//返回他的名字
}
您可以轻松地将其编写为特定课程的函数—您可以删除该参数,如果需要,可以直接访问私有ArrayList


或者,您可以将上述函数编写为一个静态函数,用于获取任何课程的任何学生列表。

您已经找到了得分最高的学生。找到最高分数后,用学生的姓名更新最高分数。找到最上面的标记也会找到名称

String topName;

 if(student.getMark() > top) {
        top = student.getMark();
        topName = student.getName();
    }

如果学生在
人员列表中是唯一的,并且插入顺序不重要,则可以更改

ArrayList<Student> people = ...;
作为奖励,您可以轻松计算所有学生的排名。添加新学生将使他们处于正确的排名

注意:请注意,插入后修改学生分数不会自动改变其排名,应通过以下顺序处理:

Student s = ...;
people.remove(s);
s.setMark(42);
people.add(s);
公共课堂
{
学生[]学生;
国际学生会;
公共教室(国际学生)
{
学生=新生[numstudent];
numStudentsAdded=0;
}
公立学生getTopStudent()
{
int y=0;
//必须使用numStudentsAdded
for(int i=0;i
遍历ArrayList并找到具有最高。这将是最基本的方法。在向ArrayList添加元素时,也可以保留最高的计数。或者按标记对ArrayList排序,并在O(1)中获得最高值。我有另一个类,它具有公共字符串getName(){return name;}我试图按照您所说的做,但遇到了问题,请您阅读我文章的更新内容好吗?谢谢:)输出必须采用以下格式:System.out.println(“Top student=“+ci101.Top());在上面的代码中,您对top mark进行了两次相同的检查。您只需要为名称添加一行(topName=student.getName();)和变量(String topName;),非常感谢!它起作用了!我现在还有一个小问题,平均值不太正确,例如答案应该是70.50,它显示为70.0,你知道为什么吗
Student s = ...;
people.remove(s);
s.setMark(42);
people.add(s);
    public class Classroom
{
    Student[] students;
    int numStudentsAdded;



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

    public Student getTopStudent()
    {
        int y = 0;

            //have to use numStudentsAdded

            for ( int i = 0 ; i < numStudentsAdded ; i++)
            {
                if (students[y].getAverageScore() < students[i].getAverageScore())
                {
                    y = i;
                }
            }

        return students[y] ;
    } 

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

    public void printStudents()
    {
        for(int i = 0; i < numStudentsAdded; i++)
        {
            System.out.println(students[i]);
        }
    }
}