Как отсортировать объекты массива в порядке возрастания? - PullRequest
0 голосов
/ 23 июня 2019

Мне нужно отсортировать метки в порядке возрастания.Это показывает мне ошибку: «Несовместимые типы».

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

Ответы [ 2 ]

1 голос
/ 23 июня 2019

Во-первых, в 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
    }
}

В качестве альтернативы (и, желательно, на мой взгляд), вы можете объявить один или несколько статических вложенных классов Studenti, которые реализуют Comparator<Studenti> интерфейс .Затем для сортировки массива вы можете просто вызвать Arrays.sort() и передать экземпляр соответствующего класса компаратора.Преимущество этого подхода заключается в том, что у вас может быть несколько классов, которые сортируются по разным критериям (например, имя ученика только по отметке, а затем по имени ученика).Причина, по которой я рекомендую статический вложенный класс, заключается в том, что ваш класс Studenti не обеспечивает механизм доступа внешних значений к внешним классам.Если вы сделали поля final public вместо private или если вы предоставили методы доступа, вы могли бы разделить классы компаратора на классы верхнего уровня и сохранить класс Studenti достаточно обтекаемым.

0 голосов
/ 23 июня 2019

Для сортировки предмета предмет должен быть сопоставимым. Здесь вы можете сделать это двумя способами. Поэтому нам нужно, чтобы класс ученика был сопоставимым

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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...