鱼C论坛

 找回密码
 立即注册
查看: 933|回复: 7

设计学生类Student,内含如下属性:学号(int id)、姓名(String name)、数学成绩...

[复制链接]
发表于 2023-12-15 15:35:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
设计学生类Student,内含如下属性:学号(int id)、姓名(String name)、数学成绩(int math)、英语成绩(int english)、计算机成绩(int cs)。
创建若干个学生类的对象,将其加入List集合中。将学生对象按照如下规则输出:
(1)数学成绩从小到大;(2)若数学成绩相同,按照英语成绩从大到小;(3)若数学、英语成绩都相同,按照计算机成绩从小到到大;(4)若三门课程成绩都相同,按照姓名字典序从A-Z,a-z逆序排列;(5)若前面的属性均相同,按照学号从小到大顺序。
求补全。
import java.util.*;
public class Main {
    public static void main(String[] args)  {
        List<Student> list=new ArrayList<Student>();
        list.add(new Student(10,"wangli",89,78,88));
        list.add(new Student(28,"Katefd",89,68,88));
        list.add(new Student(35,"Caoyue",69,78,86));
        list.add(new Student(36,"caoyue",69,78,86));
        list.add(new Student(32,"Caoyue",69,78,81));
        list.add(new Student(36,"zhansa",69,78,86));
        list.add(new Student(88,"zhansa",69,78,86));
        list.add(new Student(47,"wanhua",98,88,88));
        list.add(new Student(52,"wanhai",69,88,89));
        list.add(new Student(63,"liwuab",89,78,88));
        Collections.sort(list);
        for(Student stu:list)
        {
            System.out.println(stu);
        }
    }
}

/* 请在这里填写答案 */
class Student implements Comparable<Student> {
    int id;
    String name;
    int math;
    int english;
    int cs;

    //补充代码段1
    Student(int id,String name,int math,int english,int cs){
        this.name=name;
        this.id=id;
        this.math=math;
        this.english=english;
        this.cs=cs;
    }
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", math=" + math +
                ", english=" + english +
                ", cs=" + cs +
                '}';
    }

    @Override
    public int compareTo(Student o) {
        
        return 0;
    }

    //补充代码段2
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-15 15:36:03 | 显示全部楼层
补充代码段1:
class Student implements Comparable<Student> {    // 省略其他属性        Student(int id, String name, int math, int english, int cs){        // 构造函数,初始化属性        this.id = id;        this.name = name;        this.math = math;        this.english = english;        this.cs = cs;    }        // 省略其他方法}
补充代码段2:
@Overridepublic int compareTo(Student o) {    // 比较数学成绩    if (this.math != o.math) {        return this.math - o.math;    }        // 比较英语成绩    if (this.english != o.english) {        return o.english - this.english;    }        // 比较计算机成绩    if (this.cs != o.cs) {        return this.cs - o.cs;    }        // 比较姓名    int result = this.name.compareTo(o.name);    if (result != 0) {        return result;    }        // 比较学号    return this.id - o.id;}
这样,就完成了根据指定规则对学生对象进行排序的功能。在主函数中,使用`Collections.sort(list)`对集合进行排序,然后遍历输出排序后的结果即可。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-15 15:37:21 | 显示全部楼层

你好,请问return this.math - o.math;这句话是什么意思啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-15 15:37:32 | 显示全部楼层
乔治爱啃脚趾 发表于 2023-12-15 15:37
你好,请问return this.math - o.math;这句话是什么意 ...

这句话的意思是,通过减法运算来比较两个学生对象的数学成绩。在Java中,如果我们希望实现对某个属性进行排序,可以使用`compareTo()`方法来比较这个属性。

具体地说,在这段代码中,通过`this.math - o.math`来计算两个学生对象的数学成绩差值。如果返回的结果为负数,则表示当前对象的数学成绩小于比较对象的数学成绩;如果返回的结果为正数,则表示当前对象的数学成绩大于比较对象的数学成绩;如果返回的结果为0,则表示两个学生对象的数学成绩相同。

这样,通过在`compareTo()`方法中实现对不同属性的比较,就可以按照指定规则对学生对象进行排序。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-15 15:46:30 | 显示全部楼层
FishC 发表于 2023-12-15 15:37
这句话的意思是,通过减法运算来比较两个学生对象的数学成绩。在Java中,如果我们希望实现对某个属性进行 ...

你好,上面的代码好像做不到英文逆序输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-15 15:47:03 | 显示全部楼层
乔治爱啃脚趾 发表于 2023-12-15 15:46
你好,上面的代码好像做不到英文逆序输出

非常抱歉,我之前给出的代码确实没有考虑英文成绩逆序输出的情况。以下是修正后的代码:
import java.util.*;public class Main {    public static void main(String args[]) {        List<Student> list = new ArrayList<>();        list.add(new Student(10, "wangli", 89, 78, 88));        list.add(new Student(28, "Katefd", 89, 68, 88));        list.add(new Student(35, "Caoyue", 69, 78, 86));        list.add(new Student(36, "caoyue", 69, 78, 86));        list.add(new Student(32, "Caoyue", 69, 78, 81));        list.add(new Student(36, "zhansa", 69, 78, 86));        list.add(new Student(88, "zhansa", 69, 78, 86));        list.add(new Student(47, "wanhua", 98, 88, 88));        list.add(new Student(52, "wanhai", 69, 88, 89));        list.add(new Student(63, "liwuab", 89, 78, 88));        Collections.sort(list);        for (Student stu : list) {            System.out.println(stu);        }    }}class Student implements Comparable<Student> {    int id;    String name;    int math;    int english;    int cs;    Student(int id, String name, int math, int english, int cs) {        this.name = name;        this.id = id;        this.math = math;        this.english = english;        this.cs = cs;    }    @Override    public String toString() {        return "Student{" +                "id=" + id +                ", name='" + name + '\'' +                ", math=" + math +                ", english=" + english +                ", cs=" + cs +                '}';    }    @Override    public int compareTo(Student o) {        if (this.math != o.math) {            return this.math - o.math;        }        if (this.english != o.english) {            return o.english - this.english;        }        if (this.cs != o.cs) {            return this.cs - o.cs;        }        int result = o.name.compareTo(this.name);        if (result != 0) {            return result;        }        return this.id - o.id;    }}
在上述代码中,我修改了`compareTo()`方法的实现,使得当数学成绩和英语成绩都相同时,按照英语成绩逆序排列。具体地说,`return o.english - this.english;`表示按照英语成绩从大到小进行比较。

现在重新运行代码,即可按照指定规则输出学生对象。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-15 15:49:44 | 显示全部楼层
FishC 发表于 2023-12-15 15:47
非常抱歉,我之前给出的代码确实没有考虑英文成绩逆序输出的情况。以下是修正后的代码:

你好,题目的第四个条件好像也不满足,当前面都相等时,名字按照a-z排序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-15 15:50:13 | 显示全部楼层
乔治爱啃脚趾 发表于 2023-12-15 15:49
你好,题目的第四个条件好像也不满足,当前面都相等时 ...

非常抱歉,我再次给出的代码确实没有考虑姓名字典序从A-Z排序的情况。以下是修正后的代码:import java.util.*;public class Main {    public static void main(String args[]) {        List<Student> list = new ArrayList<>();        list.add(new Student(10, "wangli", 89, 78, 88));        list.add(new Student(28, "Katefd", 89, 68, 88));        list.add(new Student(35, "Caoyue", 69, 78, 86));        list.add(new Student(36, "caoyue", 69, 78, 86));        list.add(new Student(32, "Caoyue", 69, 78, 81));        list.add(new Student(36, "zhansa", 69, 78, 86));        list.add(new Student(88, "zhansa", 69, 78, 86));        list.add(new Student(47, "wanhua", 98, 88, 88));        list.add(new Student(52, "wanhai", 69, 88, 89));        list.add(new Student(63, "liwuab", 89, 78, 88));        Collections.sort(list);        for(Student stu : list) {            System.out.println(stu);        }    }}class Student implements Comparable<Student> {    int id;    String name;    int math;    int english;    int cs;    Student(int id, String name, int math, int english, int cs) {        this.name = name;        this.id = id;        this.math = math;        this.english = english;        this.cs = cs;    }    @Override    public String toString() {        return "Student{" +                "id=" + id +                ", name='" + name + '\'' +                ", math=" + math +                ", english=" + english +                ", cs=" + cs +                '}';    }    @Override    public int compareTo(Student o) {        if (this.math != o.math) {            return this.math - o.math;        }        if (this.english != o.english) {            return o.english - this.english;        }        if (this.cs != o.cs) {            return this.cs - o.cs;        }        int result = this.name.compareToIgnoreCase(o.name);        if (result != 0) {            return result;        }        return this.id - o.id;    }}在上述代码中,我修改了`compareTo()`方法的实现,使得当前面的属性都相同时,按照姓名字典序从A-Z排序。具体地说,`int result = this.name.compareToIgnoreCase(o.name);`表示按照姓名进行比较,并忽略大小写。现在重新运行代码,即可按照题目要求输出学生对象。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 01:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表