首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java compareTo方法入门级

Java compareTo方法入门级
EN

Stack Overflow用户
提问于 2019-01-03 12:57:57
回答 5查看 2.1K关注 0票数 6

我有一个作业,我需要创建一个学生类,您可以在其中存储学生的尼泊尔代码(String nep_c)和在考试中获得的点数(int point_num)。准备一个公共int getMark ()方法,该方法将获得的票作为分数的函数返回给考试,如下表所示:

  • 在100 ~ 90- >5之间;
  • 在90 ~ 80 -> 4之间;
  • 在80到70 -> 3之间
  • 70至60 -> 2
  • < 60 -> 1

这个类实现了可比较的接口和compareTo ()方法,根据尼泊尔代码对学生进行排序。在里面,根据你得到的分数。不幸的是,我不理解comperTo方法。你能帮我写正确的代码吗?

代码语言:javascript
复制
public class Student implements Comparable{

private String nep_c;
private int point_num;
private int Mark;

public Student(int point_num, String nep_c) {
    this.point_num = 65;
    this.nep_c= "AAA1BB1";
}

public int getMark(){
    if (point_num <= 100 && point_num > 90)
    Mark = 5;
    else if (point_num <= 90 && point_num > 80)
    Mark = 4;
    else if (point_num <= 80 && point_num > 70)
    Mark = 3;
    else if (point_num <= 70 && point_num > 60)
    Mark = 2;
    else if (point_num <= 60)
    Mark = 1;
    else{
        return 0;
    }
    return Mark;
}

public String getNep_c(){
    return nep_c;
}

public int getPoint_num(){
    return point_num;
}

@Override
public int compareTo (Object o){
    return ???;
}

}

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-01-03 13:03:26

根据尼泊尔代码对学生进行排序

两部分。第一部分,改变

代码语言:javascript
复制
implements Comparable

代码语言:javascript
复制
implements Comparable<Student>

然后

代码语言:javascript
复制
@Override
public int compareTo(Student o) {
    return this.nep_c.compareTo(o.nep_c);
}

然而,你在里面说,根据你得到的分数。所以也许你真的想

代码语言:javascript
复制
@Override
public int compareTo(Student o) {
    return Integer.compare(getMark(), o.getMark());
}

如果您打算按尼泊尔代码进行排序,并使用标记作为平手,那么您可以这样做:

代码语言:javascript
复制
int c = this.nep_c.compareTo(o.nep_c);
if (c != 0) {
    return c;
}
return Integer.compare(getMark(), o.getMark());

或者,在Java 8+中,使用类似于Comparator.comparing

代码语言:javascript
复制
return Comparator.comparing(Student::getNep_c)
        .thenComparingInt(Student::getMark).compare(this, o);
票数 7
EN

Stack Overflow用户

发布于 2019-01-03 13:07:27

compareTo之所以获得Object,是因为您实现了Comparable,而不是泛型Comparable。这就是为什么很难看出需要做什么。

更改代码如下:

代码语言:javascript
复制
public class Student implements Comparable<Student> {
    ...
    @Override
    public int compareTo(Student other) {
        ...
    }
}

现在在实现中,将这个学生的nep_cother.nep_c进行比较。如果这两者不相等,则返回比较结果;否则返回比较标记的结果。

注:--您的getMark方法有一个问题:当它返回2时,它返回60分的学生1,并指定私有Mark字段,该字段可以转换为局部变量。

票数 2
EN

Stack Overflow用户

发布于 2019-01-03 13:07:35

compareTo方法在Comparable上接受一个比较当前对象的值,并且应该返回:

  • 如果当前对象位于其他对象之前(可以使用任何负整数),则为-1
  • 如果两个对象相等,则为0
  • 如果当前对象位于其他对象之后(可以使用任何正整数),则为1

如果您想通过两个不同的字段比较两个对象,可以执行以下操作(确保实现Comparable<Student>):

代码语言:javascript
复制
@Override
public int compareTo(Student other) {
    final int comparedNepCode = nep_c.compareTo(other.nep_c);
    if (comparedNepCode == 0) {
        return Integer.compare(getMark(), other.getMark());
    }
    return comparedNepCode;
}

在比较数字时,从当前数字中减去另一个数字会给出一个升序,因此:

  • x < y <=> x - y < 0
  • x = y <=> x - y = 0
  • x > y <=> x - y > 0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54022780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档