如何按升序对数组的对象排序?

时间:2019-06-23 13:22:45

标签: java sorting

我需要按升序对标记进行排序。它向我显示了错误:“不兼容的类型”。

static void sortimi(Studenti[] std ){

    int perk=0;    

    for (int i=0; i<std.length; i++) {
             for(int j=1; j<std.length - i; j++) {
                 if(std[j-1] > std[j]){ // Error: Bad operand types for binary operator
                 perk=std[j-1];          // Error: Incompatible types
                 std[j]=perk;             // Error: Incompatible types
                 }
    }
}

public class Studentat {

    /**
     * @param args the command line arguments
     */

    public static void main(String[] args) {
        // TODO code application logic here
        Studenti[] std= new Studenti[3];

        for(int i=0; i<std.length;i++){
        std[i]= new Studenti();    
        }

        for(int i = 0; i < std.length; i++){
        System.out.println(std.toString());

         }
    }



public class Studenti {

    private String name;
    private int mark;

    public Studenti(){
    Scanner s = new Scanner(System.in);

    System.out.print("Write student's name:" + " ");
    this.name = s.nextLine();

    System.out.print("Write students' mark:" + " ");
    this.mark = s.nextInt();

    if(mark<5 || mark>10){
                mark = 0;
                System.out.println("The given mark is wrong");        
    }
}

static void sortimi(Studenti[] std ){

    int perk=0;    

    for (int i=0; i<std.length; i++) {
             for(int j=1; j<std.length - i; j++) {
                 if(std[j-1] > std[j]){ // Error: Bad operand types for binary operator
                 perk=std[j-1];          // Error: Incompatible types
                 std[j]=perk;             // Error: Incompatible types
                 }
    }
}
    }

2 个答案:

答案 0 :(得分:1)

首先,在sortimi(Studenti[] std)中,只需声明perk的类型为Studenti而不是int

Studenti perk = null;

此外,您似乎已经两次声明了方法sortimi(Studenti[] std)。您必须摆脱其中之一。

最后,您无法使用Studenti运算符比较>的实例。您必须定义某种比较方法或对字段进行排序。例如:

public class Studenti {
    ...
    public boolean precedes(Studenti other) {
        // logic for deciding order for students
    }
}

或者(我认为最好是),您可以声明一个或多个实现Comparator<Studenti> interface的静态嵌套类Studenti。然后,要对数组进行排序,只需调用Arrays.sort()并传递适当的比较器类的实例即可。这种方法的优点是,您可以有多个根据不同条件排序的课程(例如,仅学生姓名与按标记,然后按学生姓名)。我建议使用静态嵌套类的原因是您的Studenti类没有提供任何机制供外部类访问字段值。如果您将字段设为final public而不是private,或者提供了访问器方法,则可以使比较器类成为独立的顶级类,并使Studenti类保持相当的精简。 >

答案 1 :(得分:0)

要对项目进行排序,则该项目应具有可比性。在这里,您可以通过两种方式进行操作。 因此我们需要学生班级具有可比性

public class Studenti extends Comparable<Studenti> {
private String name;
private int mark;

public Studenti() {
    Scanner s = new Scanner(System.in);

    System.out.print("Write student's name:" + " ");
    this.name = s.nextLine();

    System.out.print("Write students' mark:" + " ");
    this.mark = s.nextInt();

    if (mark < 5 || mark > 10) {
        mark = 0;
        System.out.println("The given mark is wrong");
    }

}

public int getMark() {
    return mark;
}

public void setMark(int newMark) {
    this.mark = newMark;
}

@Override
public int compareTo(Studenti o) {
    return o.getMark()  - this.mark; //Change this statement for reversing the sort order.
}

}

现在可以了

Arrays.sort(studentsArray); 详情请参阅 https://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/