Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

JAVA Comparator in FOR-Schleife

Frage Entwicklung Java

Mitglied: bvdcomp

bvdcomp (Level 1) - Jetzt verbinden

16.11.2010 um 19:19 Uhr, 3959 Aufrufe, 2 Kommentare

Ich soll ein Programm erstellen welches nach Noten, Alter, Name und Nr sortiert.
Ich habe folgenden Code der einen Fehler ausgibt:

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.");
}
}

Fehler:
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)


Kann mir jemand da weiter helfen?
Mitglied: bankaifan
25.11.2010 um 13:17 Uhr
Hey,

schau doch mal was der Compiler in deiner Studentklasse sagt. oder poste sie hier.
Bitte warten ..
Mitglied: suchong
22.11.2011 um 13:02 Uhr
Hallo
In dieser Implementierung ist ziemlich vieles falsch! Zuerst einmal sollte die Liste den Typ Student beinhalten, also List<Stundent> students = new ArrayList<Student>(). Dann, weil Du nach verschiedenen Feldern sortieren willst, musst Du für diese je eine eigene Klasse implementieren, z.B.

public class SortName implements Comparator<Student> {

und dann die Methode compare(Student s1, Student s2) und den Vergleich für den Namen. Analoges für Nr, Alter und Noten. Um die ArrayList nach Studenthamen zu sortieren, rufe ein Collections.sort(students, new SortName()) auf. Dann werden die in einer for-Schleife auch nach Namen ausgegeben.

Ich habe hierzu ein Tutorial veröffentlicht: http://www.administrator.de/Sortierung_eigener_Objekte_in_einer_ArrayLi ...

Hier ein Versuch zur Korrektur. Die Klasse Student könnte wie folgt aussehen:

01.
public class Student { 
02.
 
03.
	private int nr; 
04.
	private String name; 
05.
	private int alter; 
06.
	private double note; 
07.
	 
08.
	public Student(int nr, String name, int alter, double note) { 
09.
		this.name = name; 
10.
		this.alter = alter; 
11.
		this.nr = nr; 
12.
		this.note = note; 
13.
14.
 
15.
	public double getNote() { 
16.
		return note; 
17.
18.
 
19.
	public void setNote(double note) { 
20.
		this.note = note; 
21.
22.
 
23.
	public int getNr() { 
24.
		return nr; 
25.
26.
 
27.
	public String getName() { 
28.
		return name; 
29.
30.
 
31.
	public int getAlter() { 
32.
		return alter; 
33.
34.
}
Bevor sortiert werden kann, müssen noch die Klassen erstellt werden, welche das Interface Comparator implementieren. Musterhaft sei das für die Noten und für das Alter:

01.
import java.util.Comparator; 
02.
 
03.
/** 
04.
 * Sortierung nach Noten 
05.
 */ 
06.
public class SortNoten implements Comparator<Student>{ 
07.
 
08.
	@Override 
09.
	public int compare(Student s1, Student s2) { 
10.
		// Die Notenwerte werden zu Double gewandelt,  
11.
		// damit die Methode compareTo genutzt werden kann 
12.
		Double d1 = s1.getNote(); 
13.
		Double d2 = s2.getNote(); 
14.
		return d1.compareTo(d2); 
15.
16.
}
01.
import java.util.Comparator; 
02.
 
03.
/** 
04.
 * Sortierung nach Alter 
05.
 */ 
06.
public class SortAlter implements Comparator<Student>{ 
07.
 
08.
	@Override 
09.
	public int compare(Student s1, Student s2) { 
10.
		Integer a1 = s1.getAlter(); 
11.
		Integer a2 = s2.getAlter(); 
12.
		return a1.compareTo(a2); 
13.
14.
}
Zum Schluss wird eine Klasse erstellt, welche die Methode main() enthält, welche die Studenten erzeugt, diese einer ArrayList hinzufügt, dann die Liste nach Noten aufsteigend sortiert und ausgibt und dann die Liste nach Alter aufsteigend sortiert und ebenfalls auf der Konsole ausgibt.

01.
import java.util.ArrayList; 
02.
import java.util.Collections; 
03.
import java.util.Iterator; 
04.
import java.util.List; 
05.
 
06.
public class StudentExample { 
07.
	private static List<Student> students = new ArrayList<Student>(); 
08.
	 
09.
	public static void main(String[] args) { 
10.
		students.add(new Student(4, "Archimedes Syrakus", 2296, 6.0)); 
11.
		students.add(new Student(3, "Fritzli Schneider", 9, 5.9)); 
12.
		students.add(new Student(1, "Walterli Tell junjun.", 12, 4.3)); 
13.
		students.add(new Student(6, "Greengrey vonRotz", 20, 3.7)); 
14.
		students.add(new Student(5, "Maria Stuart", 467, 2.9)); 
15.
		 
16.
		System.out.printf("Nach Noten sortiert:%n"); 
17.
		Collections.sort(students, new SortNoten()); 
18.
		Iterator<Student> itr = students.iterator(); 
19.
		Student s; 
20.
		while (itr.hasNext()) { 
21.
			s = itr.next(); 
22.
			System.out.printf("Student %s, Note %.2f%n", s.getName(), s.getNote()); 
23.
24.
		 
25.
		System.out.print("%n"); 
26.
		System.out.printf("Nach Alter sortiert:%n"); 
27.
		Collections.sort(students, new SortAlter()); 
28.
		itr = students.iterator(); 
29.
		while (itr.hasNext()) { 
30.
			s = itr.next(); 
31.
			System.out.printf("Student %s, Alter %d%n", s.getName(), s.getAlter()); 
32.
33.
34.
}
Der Output entspricht nicht einer Musterformatierung, hauptsache die Sortierungen stimmen:

Nach Noten sortiert:
Student Maria Stuart, Note 2.90
Student Greengrey vonRotz, Note 3.70
Student Walterli Tell junjun., Note 4.30
Student Fritzli Schneider, Note 5.90
Student Archimedes Syrakus, Note 6.00
%nNach Alter sortiert:
Student Fritzli Schneider, Alter 9
Student Walterli Tell junjun., Alter 12
Student Greengrey vonRotz, Alter 20
Student Maria Stuart, Alter 467
Student Archimedes Syrakus, Alter 2296

Eine Sortierung nach Nummer und Namen funktioniert analog. Bei Fragen stehe ich gerne zur Verfügung.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Zwei Ergänzungen in einer For Schleife

Frage von charmeur zum Thema Batch & Shell ...

Batch & Shell
gelöst FOR Schleife mit Unterverzeichnissen, die Ausgabe kürzen (tokens evtl.) (5)

Frage von Kriegstreiber zum Thema Batch & Shell ...

Batch & Shell
gelöst For Schleife für Abgleich mit Text-Datei und Unterverzeichnisse (4)

Frage von grisur zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Hardware
Laptop ins Salzwasser gefallen (18)

Frage von Marcel94 zum Thema Hardware ...

Switche und Hubs
LAG zwischen Cisco SG300 und Dlink DGS1100 herstellen - wie? (13)

Frage von White-Rabbit2 zum Thema Switche und Hubs ...

Hardware
Lenovo Yoga 500 über angeschlossene USB Tastatur booten (13)

Frage von thomasreischer zum Thema Hardware ...

Viren und Trojaner
Wie werde ich den Mist "fanli90" wieder los? (12)

Frage von Taumel zum Thema Viren und Trojaner ...