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