Java CompareTO方法问题

1dkrff03  于 2022-12-28  发布在  Java
关注(0)|答案(3)|浏览(133)

我试图整理出一个简单的名单,学生马克与一个简单的java程序,但我得到
线程“main”中出现异常java.lang.ClassCastException:无法将Student强制转换为java.lang.Comparable

public class Student {
public String name;
public int mark;

public Student(String name, int mark){
    this.name=name;
    this.mark=mark;
}

public int compareTo(Student o){
    return this.mark-o.mark;

}
public String toString(){
    String s = "Name: "+name+"\nMark: "+mark+"\n";
    return s;
}

public static void main(String[] args) {
    Student Class[] = new Student[9];
    Class[0] = new Student("Henry",100);
    Class[1] = new Student("Alex", 10);
    Class[2] = new Student("Danielle",100);
    Class[3] = new Student("Luke",10);
    Class[4] = new Student("Bob",59);
    Class[5] = new Student("Greg",76);
    Class[6] = new Student("Cass",43);
    Class[7] = new Student("Leg",12);
    Class[8] = new Student("Bobe",13);


    Arrays.sort(Class);
    for(int i = 0;i<Class.length;i++){
        System.out.println(Class[i]);
jgwigjjp

jgwigjjp1#

你的Student必须实现Comparable接口,以便使用Arrays#sort传递Student[]数组。事实上,你的类当前有一个compareTo方法并不意味着它实现了这个接口,你必须声明:

public class Student implements Comparable<Student> {
    //class definition...
}
b5lpy0ml

b5lpy0ml2#

让你的Student类实现Comparable<Student>compareTo()方法在排序时不能独立工作。
另外,Class看起来不是一个很好的变量名。使用students怎么样?另外,我发现您的compareTo方法有一个问题:

public int compareTo(Student o){
    return this.mark-o.mark;
}

不要比较两个整数或长整型数相减的结果。结果可能溢出。请使用Integer.compare(int, int)方法。
另外,去掉public字段,将其设置为private,并提供public getter来访问它们。

tkclm6bt

tkclm6bt3#

public class Fawaz1 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // تجربه 
        String SS[]=new String[6];
        double GG[]=new double[6];
        SS[0]="fawaz";  
        SS[1]="ahmd";
        SS[2]="hmd";
        SS[3]="fos";
        SS[4]="raid";
        SS[5]="majd";
        
        GG[0]=3.94;
        GG[1]=2.50;
        GG[2]=2.95;
        GG[3]=4.92;
        GG[4]=3.0;
        GG[5]=3.78;
        
        int i;
        for (i=0; i<3; i++){
            System.out.print(SS[i]+"\t"+GG[i]+"\t");
            if (GG[i]>=4.75)
            {System.out.println("A+");}
            else if(GG[i]>=4.50){
                System.out.println("A");
            } else if(GG[i]>=3.70){
                System.out.println("B+");
            }else if(GG[i]>=3.59){
                System.out.println("B");
            }else if(GG[i]>=2.78){
                System.out.println("C+");
            }else if(GG[i]>=2.55){
                System.out.println("C");
            }else if(GG[i]>=1.52){
                System.out.println("D");
            }else if(GG[i]>=1.10){
                System.out.println("F");
            }
        }
        
        
        
        
    }
    
}

相关问题