簡體   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