2 класса сравнения в Java - PullRequest
0 голосов
/ 26 марта 2020

Я нахожусь во втором классе компьютерного программирования, когда меня попросили написать программу, которая реализует 2 класса компаратора. Вот мой код ниже, но я не могу понять, почему Collections.sort (newStudent, new sortByName ()); и Collections.sort (newStudent, new sortByRollNo ()); выявляет ошибку. Спасибо!

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;


public class StudentObjects {
    int rollno;
    String name;
    String address;

public StudentObjects(int rollno, String name, String address) { //constructor
    this.rollno = rollno;
    this.name = name;
    this.address = address;
}
@Override
public String toString() {
    return this.rollno + " " + this.name + " " + this.address; //to print in main
}

class sortByName implements Comparator<StudentObjects> {
    public int compare(StudentObjects a, StudentObjects b) {
        return a.name.compareTo(b.name);
    }
}

class sortByRollNo implements Comparator<StudentObjects> {
    public int compare(StudentObjects a, StudentObjects b) {
        return a.rollno - b.rollno;
    }
}

public static void main(String[] args) {
        int i = 0;
    ArrayList<StudentObjects> newStudent = new ArrayList<StudentObjects>();
        newStudent.add(new StudentObjects(342, "Harry Potter", "4 Privet Drive"));
        newStudent.add(new StudentObjects(555, "Hermione Granger", "67 Hampstead Garden"));
        newStudent.add(new StudentObjects(788, "Ron Weasley", "5 Ottery St Catchpole"));
        newStudent.add(new StudentObjects(542, "Albus Dumbledore", "88 Godric's Hollow"));
        newStudent.add(new StudentObjects(972, "Sirius Black", "12 Grimmauld Place"));
        newStudent.add(new StudentObjects(125, "Remus Lupin", "12 Grimmauld Place"));
        newStudent.add(new StudentObjects(783, "Neville Longbottom", "Hogwarts Castle"));
        newStudent.add(new StudentObjects(168, "Luna Lovegood", "24 Ottery St Catchpole"));
        newStudent.add(new StudentObjects(224, "Severus Snape", "12 Spinner's End"));
        newStudent.add(new StudentObjects(991, "Minerva McGonagall", "Hogwarts Castle"));

        Collections.sort(newStudent, new sortByName());
            System.out.println("Students sorted by name: ");
            for (i=0; i<newStudent.size(); i++) {
                System.out.println(newStudent.get(i));
            }

        System.out.println("");

        Collections.sort(newStudent, new sortByRollNo());
            System.out.println("Students sorted by roll number: ");
            for (i=0; i<newStudent.size(); i++) {
                System.out.println(newStudent.get(i));
            }
}
}

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Поместите эти два класса вне вашего основного класса "Объекты ученика" в один и тот же файл или в разные файлы или сделайте их внутренними классами.

class sortByName implements Comparator<StudentObjects> {
    public int compare(StudentObjects a, StudentObjects b) {
        return a.name.compareTo(b.name);
    }
}

class sortByRollNo implements Comparator<StudentObjects> {
    public int compare(StudentObjects a, StudentObjects b) {
        return a.rollno - b.rollno;
    }
}
0 голосов
/ 26 марта 2020

Похоже, вы создаете класс внутри класса, и это нормально, но если вы собираетесь ссылаться на внутренний класс из контекста stati c, этот класс также необходимо определить как статус c.

...