繁体   English   中英

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

[英]How to sort objects of an array in ascending order?

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

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
                 }
    }
}
    }

首先,在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>接口Studenti静态嵌套类。 然后,要对数组进行排序,您只需调用Arrays.sort()并传递适当的比较器类的实例即可。 这种方法的优势在于,您可以拥有多个按不同条件排序的班级(例如,仅按学生姓名对比按标记,然后按学生姓名)。 我建议使用静态嵌套类的原因是,您的Studenti类不提供任何机制供外部类访问字段值。 如果将字段final public而不是private或者提供了访问器方法,则可以将比较器类Studenti顶层顶级类,并相当简化Studenti类。

要对项目进行排序,该项目应该是可比较的。 在这里,您可以通过两种方式进行操作。 所以我们需要学生班级是可比的

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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM