Objekte sortieren mit Comparator

bvdcomp

Grünschnabel
Ich soll ein Programm erstellen welches nach verschiedenen Attribute sortiert:

Code:
public static void main(String[] args) {
        List<Comparator> comp = new ArrayList<Comparator>();
        
        comp.add(new NummerSortieren());
        comp.add(new NameSortieren());
        comp.add(new AlterSortieren());
        comp.add(new NoteSortieren());
        
        Student[] studis = {     
              new Student(4, "Archimedes Syrakus", 2296, 6.0),
              new Student(3, "Fritzli Schneider", 9, 5.9),
              new Student(1, "Walterli Tell junjun.", 12, 4.3),
              new Student(6, "Greengrey vonRotz", 20, 3.7),
              new Student(5, "Maria Stuart", 467, 2.9)
        };
        
        for (Comparator curComp: comp) {
              System.out.println("nach Notendurchschnitt sortiert:");
              System.out.println("-----------");
              for (Student alle : studis) {
                    System.out.println(alle);
              }
              Arrays.sort(studis, comp);
              System.out.println("Sortiert:");
              System.out.println("-----------");
              for (Student alle : studis) {
                    System.out.println(alle);
              }
        }
        System.out.println("-----------");
        System.out.println("Process completed.");
  }

Das sortieren nach einem Attribut ghet, wenn ich jedoch nach jedem sortieren lassen wurd und wieder dann nacheinander ausgeben will, erhalte (Code oben) ich folgenden Fehler:

Code:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The method sort(T[], Comparator<? super T>) in the type Arrays is not applicable for the arguments (Student[], List<Comparator>)
 
    at Student.main(Student.java:40)

Was ich feststellen konnte:
Code:
Comparator is a raw type. References to generic type Comparator<T> should be parameterized

Kann mir jemand da weiterhelfen kann?:(:(:(
 
Java:
Arrays.sort(studis, comp);

muss heißen

Java:
Arrays.sort(studis, curComp);

aber das lässt sich aus der Fehlermeldung ablesen.
 
Hi,

erstmal warum der Fehler erscheint!

Du übergebst in der Zeile
Code:
Arrays.sort(studis, comp)
eine Liste von Comperators... der möchte nacheinander einzelne Comperators. also muss dort
Code:
Arrays.sort(studis, curComp)
stehen.

Zur um die rawType Warnungen zu killen, hab ich dir mal den Code schnell reworked

Code:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Comparator;

public class Test {

	public static void main(String[] args) {
        List<Comparator<Student>> comp = new ArrayList<Comparator<Student>>();
        
        comp.add(new NummerSortieren());
        comp.add(new NameSortieren());
        comp.add(new AlterSortieren());
        comp.add(new NoteSortieren());
        
        Student[] studis = {     
              new Student(4, "Archimedes Syrakus", 2296, 6.0),
              new Student(3, "Fritzli Schneider", 9, 5.9),
              new Student(1, "Walterli Tell junjun.", 12, 4.3),
              new Student(6, "Greengrey vonRotz", 20, 3.7),
              new Student(5, "Maria Stuart", 467, 2.9)
        };
        
        for (Comparator<Student> curComp: comp) {
              System.out.println("nach Notendurchschnitt sortiert:");
              System.out.println("-----------");
              for (Student alle : studis) {
                    System.out.println(alle);
              }
              Arrays.sort(studis, curComp);
              System.out.println("Sortiert:");
              System.out.println("-----------");
              for (Student alle : studis) {
                    System.out.println(alle);
              }
        }
        System.out.println("-----------");
        System.out.println("Process completed.");
  }
}

Nun musst du nur noch die selbstgeschriebenen einzelnen Comperatoren abwandeln nach dem Schema

Code:
import java.util.Comparator;

public class NameSortieren implements Comparator<Student> {


	@Override
	public int compare(Student o1, Student o2) {
		// sortieralgorithmus
		return 0;
	}

}

Ich hoffe ich konnte dir weiterhelfen.

Greaz
 

Neue Beiträge

Zurück