JAVA如何在本练习中使用compareTo比较整数

JAVA如何在本练习中使用compareTo比较整数,java,compareto,Java,Compareto,我试着做这个练习:我有一个学生有名字、姓氏和数字,我想按数字排序。如果我想按名字或姓氏排序,似乎很容易,但用数字我不知道怎么做。。 这是我的代码: public class Student implements Comparable<Student> { private String name; private String surname; private int number; public Student(String n, String s, int m) { n

我试着做这个练习:我有一个学生有名字、姓氏和数字,我想按数字排序。如果我想按名字或姓氏排序,似乎很容易,但用数字我不知道怎么做。。 这是我的代码:

public class Student implements Comparable<Student> {
private String name;
private String surname;
private int number;


public Student(String n, String s, int m) {
    name = n;
    surname = s;
    number = m;
}

public String getName() {
    return name;
}

public String getSurname() {
    return surname;
}

public int getmatricola() {
    return number;
}
//CompareTo Name
public int compareTo(Student otherObject) {
    return name.compareTo(otherObject.getName());
}
}
//TESTER
 ArrayList<Student> list = new ArrayList<Student>(); 
 System.out.print("\n ORDER BY NUMBER \n");

    Collections.sort(list);
    for (int i = 0; i < list.size(); i++) {
        Student s = list.get(i);
        String std = s.getAll();
        System.out.println(std);


    }
公共班级学生实施可比{
私有字符串名称;
私家姓;
私有整数;
公立学生(字符串n、字符串s、整数m){
name=n;
姓氏=s;
数字=m;
}
公共字符串getName(){
返回名称;
}
公共字符串getNames(){
返回姓氏;
}
公共int getmatricola(){
返回号码;
}
//比较名称
公共整数比较(学生其他对象){
返回name.compareTo(otherObject.getName());
}
}
//测试员
ArrayList=新建ArrayList();
System.out.print(“\n按编号排序\n”);
集合。排序(列表);
对于(int i=0;i
因此,为什么数字是整数,您可以减去数字并返回差值:

public class Student implements Comparable<Student> {
private String name;
private String surname;
private int number;


public Student(String n, String s, int m) {
    name = n;
    surname = s;
    number = m;
}

public String getName() {
    return name;
}

public String getSurname() {
    return surname;
}

public int getmatricola() {
    return number;
}
//CompareTo number
public int compareTo(Student otherObject) {
    return number - otherObject.getmatricola();
}
}
公共班级学生实施可比{
私有字符串名称;
私家姓;
私有整数;
公立学生(字符串n、字符串s、整数m){
name=n;
姓氏=s;
数字=m;
}
公共字符串getName(){
返回名称;
}
公共字符串getNames(){
返回姓氏;
}
公共int getmatricola(){
返回号码;
}
//比数
公共整数比较(学生其他对象){
返回编号-otherObject.getmatricola();
}
}

您可以实现以下功能:

public int compareTo(Student otherObject) {
    return Integer.compare(this.number, otherObject.getNumber());
}

试着这样做……应该行得通 //比较名称 公共整数比较(学生其他对象){ if(this.getmatricola()>otherObject.getmatricola()) 返回1; 其他的 返回-1;
}

实际上,通过数字比较更容易。can帮助这是一个非常常见的错误,与负can溢出相比。不要这样做,这是一个坏习惯。@BoristheSpider你能添加一个例子吗。试着比较
Integer.MAX\u VALUE
Integer.MIN\u VALUE
@BoristheSpider如果我比较这些值,我看不出有问题。所以在这种情况下,这个数字总是正的。这就是为什么我认为你的例子是理论性的。@Jens试试
i=-2147483648
j=1
<代码>整数。比较(i,j)将返回
-1
,而
i-j
返回
2147483647
。符号改变了。如果我想实现数字的compareTo和名称的compareTo,那么在调用该方法时如何区分它们?@FilomenaDelSorbo您不能这样做。由于类型擦除,类只能扩展泛型接口的一个实例。您必须使用外部
比较器