我有一个班级学生 - int age,int height和Name;
我有n个学生班级的对象,如果有一个领带随机化名称,我会先尝试按年龄排序,如果有一个平局,那么按高度排序。
我有一个班级
class StudentComparator implements Comparator{
public int compare(Object 1, Object2)
{
// Logic
}
}
我有一个主要课程
class StudentSorter {
// Initialise student objects etc
// Have an array of students: students[]
Array.Sort(students,new StudentComparator() )
// print values
}
我面临的问题是输出与StudentComparator类的比较器方法中的逻辑不相似。 逻辑是:
if(Student1.age > student2.age)
{
return 1;
}
else if(Student1.age < student2.age)
{
return -1;
}
else
{
if(Student1.height > Student2.height)
return 1;
else if(Student1.height < Student2.height)
return -1;
else
return 0;
}
输入: 15约翰 16 5山姆 17 6鲁尼
输出:(无论我如何玩逻辑甚至评论它)
17 6 Rooney
16 5 Sam
15 6 John
可能是什么问题?
答案 0 :(得分:2)
你可以试试这个:
public int compare(Student s1, Student s2)
{
return s1.age == s2.age ? s1.height - s2.height : s1.age - s2.age;
}
答案 1 :(得分:1)
您的学生订购正确。你的订单方向错了。
package so3898183;
import java.util.Comparator;
public class StudentComparator implements Comparator<Student> {
@Override
public int compare(Student student1, Student student2) {
if (student1.age < student2.age)
return -1; // if the first student is "smaller", return something small
if (student1.age > student2.age)
return 1; // if the first student is "larger", return something large
if (student1.height < student2.height)
return -1;
if (student1.height > student2.height)
return 1;
return 0;
}
}
对其他解决方案的一些评论:
student1.age - student2.age
的“技巧”并检查结果的符号。对于大数字,这将溢出,并可能产生不正确的结果。int[]
)。答案 2 :(得分:0)
如果第一个值是年龄,则按年龄排序,输出正常。