我需要按升序对标记进行排序。它向我显示了错误:“不兼容的类型”。
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
}
}
}
}
答案 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/