[英]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.