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, 3949 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
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst CMD: icacls in for-Schleife (2)

Frage von Lowrider614 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Problem bei einer For Schleife (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Batch & Shell
gelöst For Schleife kaputt? (5)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
Batch: Variable Expansion in einer FOR-Schleife (9)

Frage von .Sessl zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...