我有一个作业,我需要创建一个学生类,您可以在其中存储学生的尼泊尔代码(String nep_c)和在考试中获得的点数(int point_num)。准备一个公共int getMark ()方法,该方法将获得的票作为分数的函数返回给考试,如下表所示:
这个类实现了可比较的接口和compareTo ()方法,根据尼泊尔代码对学生进行排序。在里面,根据你得到的分数。不幸的是,我不理解comperTo方法。你能帮我写正确的代码吗?
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 ???;
}}
发布于 2019-01-03 13:03:26
根据尼泊尔代码对学生进行排序
两部分。第一部分,改变
implements Comparable至
implements Comparable<Student>然后
@Override
public int compareTo(Student o) {
return this.nep_c.compareTo(o.nep_c);
}然而,你在里面说,根据你得到的分数。所以也许你真的想
@Override
public int compareTo(Student o) {
return Integer.compare(getMark(), o.getMark());
}如果您打算按尼泊尔代码进行排序,并使用标记作为平手,那么您可以这样做:
int c = this.nep_c.compareTo(o.nep_c);
if (c != 0) {
return c;
}
return Integer.compare(getMark(), o.getMark());或者,在Java 8+中,使用类似于Comparator.comparing的
return Comparator.comparing(Student::getNep_c)
.thenComparingInt(Student::getMark).compare(this, o);发布于 2019-01-03 13:07:27
compareTo之所以获得Object,是因为您实现了Comparable,而不是泛型Comparable。这就是为什么很难看出需要做什么。
更改代码如下:
public class Student implements Comparable<Student> {
...
@Override
public int compareTo(Student other) {
...
}
}现在在实现中,将这个学生的nep_c与other.nep_c进行比较。如果这两者不相等,则返回比较结果;否则返回比较标记的结果。
注:--您的getMark方法有一个问题:当它返回2时,它返回60分的学生1,并指定私有Mark字段,该字段可以转换为局部变量。
发布于 2019-01-03 13:07:35
compareTo方法在Comparable上接受一个比较当前对象的值,并且应该返回:
-1,0,1。如果您想通过两个不同的字段比较两个对象,可以执行以下操作(确保实现Comparable<Student>):
@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 < 0x = y <=> x - y = 0x > y <=> x - y > 0https://stackoverflow.com/questions/54022780
复制相似问题