Top-Themen

Aktuelle Themen (A bis Z)

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, 4000 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 ..
Ähnliche Inhalte
Java
Java: For-Schleife wird übersprungen
gelöst Frage von Gansterjo2Java10 Kommentare

Hallo zusammen Ich habe wieder einmal ein Problem :-S Ich wollte einen Rechner in Java programmieren, jedoch bleibe ich ...

Batch & Shell
Batch Schleife als FOR-SCHLEIFE
gelöst Frage von mp2711Batch & Shell2 Kommentare

Mit den FOR-Schleifen habe ich mich leider bislang zu selten auseinander gesetzt, aber da ich sonst gerade nicht weiter ...

Batch & Shell
FOR Schleife mit LOOP und nachfolgender FOR Schleife
gelöst Frage von miczarBatch & Shell6 Kommentare

Hallo zusammen, ich habe ein Problem mit einem Batchfile. Situation: im Netzwerk ist kein WINS mehr vorhanden und so ...

Batch & Shell
FOR Schleife läuft nicht
gelöst Frage von sugramBatch & Shell4 Kommentare

Hallo Ich glaube ich sehe den Wald vor lauter Bäumen nicht. Aber ich bekomme die FOR Schleife nicht zum ...

Neue Wissensbeiträge
Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 4 StundenInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 8 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 8 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 11 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Heiß diskutierte Inhalte
Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement21 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server19 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...