Fehler bei Arraysortierung

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo zusammen,

ich möchte eine Arrayliste nach dem Nachnamen sortiert (aufsteigend) haben. Hier meine selbstgeschriebene Comparatorklasse:

Code:
public class LastNameComparator 
{
	//Vergleichsobjekt fuer die Sortierung nach dem Nachnamen

	public int c( Employee a, Employee b ) 
		{	
			//return a.getLastName() - b.getLastName();
			      
			 
		
			String lastName1=((Employee)a).getLastName();
			String lastName2=((Employee)b).getLastName();

			if( lastName1.compareTo(a) < lastName2.compareTo(b) )
	            return -1;
	        if( lastName1.compareTo(a) > lastName2.compareTo(b) )
	            return 1;	           
	        else return 0;  
	        	        
	       
	    }

}



Und hier der Aufruf der Methode in meiner Hauptklasse:

Code:
public void sortTelephone()
	{
	
		LastNameComparator c= new LastNameComparator();
		
		Collections.sort(list, c);
		

	}



Jedoch will er das Collections.sort hier nicht nehmen und bringt diese Fehlermeldung:

"The method sort(List, Comparator) in the type Collections is not applicable for the arguments
(ArrayList, LastNameComparator)"


Was habe ich falsch gemacht?? Danke im Vorraus.
 
S

SlaterB

Gast
die Operation erwartet einen Comparator, du lieferst eine beliebige Klasse,
soll die Verbindung anhand des Klassennamens erkannt werden?

schreibe

public class LastNameComparator implements Comparator<Employee>

und die Operation muss

public int compare(Employee a, Employee b )
lauten
 
G

Guest

Gast
Danke für deine Antwort!

Leider nimmt er das

Code:
public class LastNameComparator implements Comparator<Employee>


Glaube es liegt daran, dass ich noch Java 1.4 benutze... Jedenfalls bringt er dies als Fehlermeldung...


Ich verstehe aber immer noch nicht ganz was ich falsch gemacht habe.. sorry, aber ich bin noch ganz neu auf dem Gebiet... :?
 

@x.l

Bekanntes Mitglied
Ja es liegt an Version 1.4

Generics haben erst mit 1.5 Einzug gehalten.

Verzichte also auf Generics
Code:
public class LastNameComparator implements Comparator {
...
}
Das dürft funktionieren.
 
S

SlaterB

Gast
kannst dir allgemein merken, dass <XY> im Code sowas neues aus Java 1.5 ist,
einfach weglassen

dann muss es aber evtl
public int compare(Object a, Object b )
statt
public int compare(Employee a, Employee b )
heißen
 

ARadauer

Top Contributor
versuchs mal ohne dem <Employee>

also woher soll den das Collections.sort(list, c); wissen, wie es deinen Comperator benutzens soll?
Die Lösung: Man einigt sich auf eine einheitliche Schnittstelle, ein Interface.

Im Interface Comparator ist genau definiert, welche Methoden ein Comperator haben muss, damit ihn sort verwenden kann: public int compare(Object arg0, Object arg1)

wenn du nun, einen Comperator implementierst

implements Comparator und dann noch brav die Methode public int compare(Object arg0, Object arg1) implementierst, kann Collections.sort deinen "Vergleicher" verwenden und alle sind glücklich


ps: ahh zu langsam! warum sudder ich auch immer so viel
 
G

Guest

Gast
Okay das habe ich alles hinbekommen und verstanden. Danke!!! Er nimmt mir das .sort jetzt! :-D

Nun hab ich noch abschließend eine kurze Frage: Wie bring ich ihm bei, dass er den Nachnamen aus meiner Bean nimmt? Also das getLastName aus meiner bean Employee??

So vielleicht? Leider bringt er mir da einen Fehler.. :-(

Code:
package com.sas.ger.mis.yp2.pdf;

import java.util.Comparator; 
import com.sas.ger.mis.yp2.pdf.bean.Employee;

public class LastNameComparator implements Comparator 
{
	 public int compare(Object arg0, Object arg1)
		{	
		 	String lastName1=((Employee)arg0.getLastName());   //Hier kommt ein Fehler!!!
		 	String lastName2=((Employee)arg0.getLastName());   //Hier kommt ein Fehler!!!!

			if( lastName1.compareTo(arg0) < lastName2.compareTo(arg1) )
	            return -1;
	        if( lastName1.compareTo(arg0) > lastName2.compareTo(arg1) )
	            return 1;	           
	        else return 0;  
	        
	        
	       
	    }
	

}



Liebe Grüße & danke!!
 
G

Guest

Gast
Oh okay... :oops: :oops: Sorry.. Ich hatte da ein paar Klammern falsch gesetzt...

So ist es richtig:
Code:
package com.sas.ger.mis.yp2.pdf;

import java.util.Comparator; 
import com.sas.ger.mis.yp2.pdf.bean.Employee;

public class LastNameComparator implements Comparator 
{
	 public int compare(Object arg0, Object arg1)
		{	
		 	String lastName1=((Employee)arg0).getLastName();
		 	String lastName2=((Employee)arg1).getLastName();

			if( lastName1.compareTo(arg0) < lastName2.compareTo(arg1) )
	            return -1;
	        if( lastName1.compareTo(arg0) > lastName2.compareTo(arg1) )
	            return 1;	           
	        else return 0;  
	    }
}


Jedoch bricht er die Sortierung ab. Ein Syntaxfehler ist nirgends mehr da.. Also denke ich, dass es ein logischer Fehler sein könnte. Das schreibt er in die Konsole:

java.lang.ClassCastException
at com.sas.ger.mis.yp2.pdf.LastNameComparator.compare(LastNameComparator.java:10)
at java.util.Arrays.mergeSort(Arrays.java:1278)
at java.util.Arrays.mergeSort(Arrays.java:1289)
at java.util.Arrays.sort(Arrays.java:1219)
at java.util.Collections.sort(Collections.java:155)
at com.sas.ger.mis.yp2.pdf.PDFManager.sortTelephone(PDFManager.java:114)
at com.sas.ger.mis.yp2.pdf.PDFMain.main(PDFMain.java:13)
Exception in thread "main"



P.S. Ich finde es echt klasse von euch, dass ihr denjenigen helft, die noch ganz neu in der Java-Welt sind! :)
 
M

maki

Gast
Code:
java.lang.ClassCastException
Bist du sicher, das da keine anderen Objekte als Employee in deinem Array stecken?

Schreib doch mal eine (Log-)Ausgabe in deiner Comparator, so das man sieht, mit welchen Objekten er es zu tun hat.
 
G

Guest

Gast
Eigentlich ja! Sonst kann da eigentlich kein anderes Objekt drin sein.

Wie mache ich diese Logausgabe in meinem Comparator? sorry, aber wie gesagt ich bin noch total neu ;-)

Danke danke
 
S

SlaterB

Gast
public int compare(Object arg0, Object arg1)
{
System.out.println("arg0: "+arg0.getClass.().getName());
System.out.println("arg1: "+arg1.getClass.().getName());
String lastName1=((Employee)arg0).getLastName();
String lastName2=((Employee)arg1).getLastName();
 
M

maki

Gast
Falls du noch kein Logging Framework verwendest, kannst du auch System.out.println(..) verwenden.
Am besten vor dem Cast ;)
 
G

Guest

Gast
Ich habe jetzt das hinzugefügt:


Code:
...
 public int compare(Object arg0, Object arg1)
		{	
		 	System.out.println("arg0: "+arg0.getClass().getName());
		 	System.out.println("arg1: "+arg1.getClass().getName()); 
...








Und diese Ausgabe schreibt er mir jetzt in die Konsole:

java.lang.ClassCastException
at com.sas.ger.mis.yp2.pdf.LastNameComparator.compare(LastNameComparator.java:13)
at java.util.Arrays.mergeSort(Arrays.java:1278)
at java.util.Arrays.mergeSort(Arrays.java:1289)
at java.util.Arrays.sort(Arrays.java:1219)
at java.util.Collections.sort(Collections.java:155)
at com.sas.ger.mis.yp2.pdf.PDFManager.sortTelephone(PDFManager.java:114)
at com.sas.ger.mis.yp2.pdf.PDFMain.main(PDFMain.java:14)
arg0: java.lang.String
arg1: java.lang.String
Exception in thread "main"
 
G

Guest

Gast
Klar.. okay... und nun? Ich vermute, dass bei
Code:
...
String lastName1=((Employee)arg0).getLastName();
String lastName2=((Employee)arg1).getLastName();
...


etwas nicht stimmt... :? Aber ich habe keine Ahnung wie ich meinen Vergleich anders anstellen soll. :?
 
S

SlaterB

Gast
erstmal musst du grundsätzlich überlegen, ob es denn ok ist wenn Strings in der Liste sind,
vielleicht sind nur Strings drin, oder gemischt?
wie willst du einen String mit einem Employee vergleichen, mit dem Nachname des Employees?


System.out.println("list: "+list.size());
for (int i=0; i<list.size(); i++) {
System.out.println(ist.get(i).getClass().getSimpleName());
}
Collections.sort(list, c);
 

ARadauer

Top Contributor
ich hab zwar noch nie Strings verglichen, aber du vergleichst hier lastNAme1 mit arg0 und wenn das kleiner ist als lastname2 verglichen mit arg1..... mhmnn erscheint mir nicht ganz logisch

so vielleicht?

Code:
public int compare(Object arg0, Object arg1) {    
          String lastName1=((Employee)arg0).getLastName(); 
          String lastName2=((Employee)arg1).getLastName(); 

         return lastName1.compareTo(lastName2);
 }

habs jetzt nicht probiert
 
G

Guest

Gast
Hallo,
ich habe mal den Code von ARadauer ausprobiert, aber ich bekomme immer noch die gleiche Fehlermeldung.
Wobei mir das aber für meine Sortierung richtiger erscheint (und auch logischer ;-))

Ja, ich möchte die Employees nach ihrem Nachnamen vergleichen. Und der Nachname ist ja als String deklariert.
Sonst, habe ich in meiner Arrayliste auch nur Strings...
 
S

SlaterB

Gast
ARadauer hat ja auch die Hälfe des Topics nicht gelesen ;)

-------

du hast also in der Liste nur Strings, na das ist doch eine Info,
dann werde ich dir eine komplexe Folgerung näherbringen:
in der Liste sind keine Employee, also macht es keinen Sinn, die Objekte arg0 und arg1 auf Employee zu casten..

->

Code:
public int compare(Object arg0, Object arg1) {    
          String lastName1=(String) arg0; 
          String lastName2=(String) arg1; 

         return lastName1.compareTo(lastName2); 
}

andererseits ist für Strings eh eine natürliche Ordnung definiert,
(Strings implemtieren Comparable)

also geht auch ganz simpel
Collections.sort(list);
ohne jeden Comparator

---------

> Sonst, habe ich in meiner Arrayliste auch nur Strings...

oder heißt das, dass beides, Strings und Employees drin sind?
nochmal die Frage vorher: ist das in diesem Fall wirklich sinnvoll, willst du daran festhalten?
 
G

Guest

Gast
Also ich habe ein Objekt Employee angelegt.
Das hat einen Namen, einen Vornamen usw. Dafür habe ich Get und Set-Methoden in einer Bean definiert.

Die Attribute dieses Objektes Employee liegen alle als String vor.


Mein Problem ist, wie sage ich der Klasse, dass sie nach dem Nachnamen sortieren soll? Also sich aus der Bean Employee die Variable LastName holen soll?


Danke!!! :)
 
S

SlaterB

Gast
dieses dein Problem tut im Moment nicht zur Sache,
zum x-ten Mal ist allein die Frage, was in der Liste drin ist:
String, Employees oder beides gemischt
 
S

SlaterB

Gast
dann hat wie gesagt die Liste und deren Sortierung nichts mit Employees oder Nachnamen zu tun,
du kannst lediglich die Strings sortieren,
aufsteigend oder absteigend,

dein Problem mit Employees liegt vielleicht an anderer Stelle, z.B. an der Stelle, an der du die Liste füllst,
dazu hast du bisher aber noch keine Infos und keine genauen Fragen gepostet
 
G

Guest

Gast
Hallo zusammen!
Ich habs hinbekommen!
So stimmt es jetzt:


Code:
import java.util.Comparator; 


public class LastNameComparator implements Comparator 
{
	public int compare(Object o1, Object o2) 
	 {   
	 	  String lastName1=((Employee)o1).getLastName();
	 	  String lastName2=((Employee)o2).getLastName();
			
		return lastName1.compareTo(lastName2); 
	 } 
}


Und in meiner Hauptklasse:


Code:
//Aufruf des Sortieralgorithmus
	public void sortLastName()
	{	
		
		LastNameComparator c= new LastNameComparator();
		Collections.sort(list, c);
	
	}


Danke nochmal für eure Hilfe! :)

LG
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Sikuli Thread Fehler Java Basics - Anfänger-Themen 3
hubmar Fehler beim mp4-datei aufrufen, nach dem zweiten aufruf Java Basics - Anfänger-Themen 1
Z Artifacts IntelliJ Fehler Java Basics - Anfänger-Themen 10
L Beginner-Fehler Java Basics - Anfänger-Themen 2
G FileChannel (inChannel/outChanel) Fehler wenn Leerzeichen enthalten Java Basics - Anfänger-Themen 17
F Kann mir jemand bei dem Fehler helfen? Java Basics - Anfänger-Themen 6
Juelin jedit Fehler beim starten Java Basics - Anfänger-Themen 2
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
E Matrizenmultiplikation Fehler Java Basics - Anfänger-Themen 0
Z Fehler Zeiterfassungsprogramm Anzeige Java Basics - Anfänger-Themen 3
C SwingWorker mit Fehler Java Basics - Anfänger-Themen 2
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
G Compiler-Fehler Fehler in Zeile 1 beheben, wie? Java Basics - Anfänger-Themen 9
W Fehler in der Datei pom.xml Java Basics - Anfänger-Themen 19
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
ohneInformatik; Dynamische Zinsen. Wo liegt der Fehler? Java Basics - Anfänger-Themen 4
Fiedelbambu deriveFont Fehler wer kann Helfen? Java Basics - Anfänger-Themen 4
I Ical4j / Kalender einlesen von URL - Fehler: "Unparseable date" Java Basics - Anfänger-Themen 16
Lion.King Fehler in double und int Java Basics - Anfänger-Themen 7
H BlueJ: was genau ist hier der Fehler? Java Basics - Anfänger-Themen 14
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
D Datentypen LocalDate.parse() ergibt Fehler Java Basics - Anfänger-Themen 5
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
N Fehler "Cannot instantiate the type" Java Basics - Anfänger-Themen 3
L Ich weis nicht was der Fehler ist! Java Basics - Anfänger-Themen 14
L30nS JNI Fehler, JRE und JDK Java Basics - Anfänger-Themen 8
E Executable jar file fehler Java Basics - Anfänger-Themen 9
S Fehler beim Programm Java Basics - Anfänger-Themen 2
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
J Syntax-Fehler? Java Basics - Anfänger-Themen 2
Jose05 Fehler im Programm feststellen Java Basics - Anfänger-Themen 2
S Methoden 2 non-static Methoden, trotzdem Fehler "non static method can not be referenced from a static context" Java Basics - Anfänger-Themen 9
G Taschenrechner ergibt Fehler in if-Abfrage Java Basics - Anfänger-Themen 6
I Fehler bei for-Schleife Java Basics - Anfänger-Themen 6
lol5443 Tic Tac Toe Fehler Java Basics - Anfänger-Themen 5
K Fehler bei der Implementierung Java Basics - Anfänger-Themen 6
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
W Verschachtelte If-else --> finde meinen Fehler nicht Java Basics - Anfänger-Themen 30
J Fehler bei array aus anderer Klasse Java Basics - Anfänger-Themen 3
H Fehler bei integer Division Java Basics - Anfänger-Themen 28
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
N Was bedeutet dieser Fehler Java Basics - Anfänger-Themen 2
fuerteb Compiler-Fehler Methode wird nicht bzw. als Fehler erkannt Java Basics - Anfänger-Themen 4
Lion.King Fehler Java Basics - Anfänger-Themen 5
AlexG. Nullpointer exeption Fehler Java Basics - Anfänger-Themen 0
C Fehler im Code Java Basics - Anfänger-Themen 10
J Anfänger, Fehler; "Der Hund liegt begraben" Java Basics - Anfänger-Themen 3
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
V Wer findet den Fehler :) Java Basics - Anfänger-Themen 12
B ArrayIndexOutOfBoundsException, ich finde den Fehler nicht? Java Basics - Anfänger-Themen 10
A Compiler Fehler - not a statement Java Basics - Anfänger-Themen 2
Arita welche Fehler gibt es noch? wie kann ich es noch vervollständigen Java Basics - Anfänger-Themen 15
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
H Logik Fehler erkennen Java Basics - Anfänger-Themen 21
T Fehler in Caesar-Chiffre Java Basics - Anfänger-Themen 7
R Fehlermeldung aber WO liegt der Fehler? Java Basics - Anfänger-Themen 7
B Nicht reproduzierbarer Fehler bei Kompilierung - Shortcut "Bereinigung" Compiler ? Java Basics - Anfänger-Themen 4
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
pumpgun99 Fehler Meldung "else without if" Java Basics - Anfänger-Themen 3
P Was bedeutet dieser Fehler? Java Basics - Anfänger-Themen 31
KogoroMori21 Java Datum Differenz (kleiner Fehler) Java Basics - Anfänger-Themen 10
N java.util.InputMismatchException Fehler Java Scanner Java Basics - Anfänger-Themen 5
H Fehler: NullPointerException und ich weiß net warum Java Basics - Anfänger-Themen 4
R Ich sehe meinen fehler nicht Java Basics - Anfänger-Themen 8
Johannes_ece Fehler: Application Terminated (TypeError): var$0.$moveToolTo is not a function Java Basics - Anfänger-Themen 4
GermanPie Fehler in Putty (kein Hauptmanifestattribut, in jar) Java Basics - Anfänger-Themen 4
M Scannen von *.txt - Dateien; wo sind der oder die Fehler? Java Basics - Anfänger-Themen 4
P Methoden aufrufen - Fehler Java Basics - Anfänger-Themen 20
JavaClap "Bruchrechner" liefert Fehler/keine Ausgabe bei Addition und Subtraktion Java Basics - Anfänger-Themen 0
B if Clause Fehler Java Basics - Anfänger-Themen 2
G Fibonacci Zahlenreihe Fehler Java Basics - Anfänger-Themen 4
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
B Fehler, aber ich weiß nicht warum Java Basics - Anfänger-Themen 3
C system cannot be resolved Fehler in Eclipse Java Basics - Anfänger-Themen 18
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
M Compiler-Fehler Fehler beim Ausführen des Codes Java Basics - Anfänger-Themen 25
M While-Schleifen-Fehler Java Basics - Anfänger-Themen 4
N Fehler bei JUnit Test Java Basics - Anfänger-Themen 5
C Projekte in 2 versch. Arbeitsbereichen: auf ein Projekt verweisen (ohne Fehler zu bekommen) Java Basics - Anfänger-Themen 8
R Java SQL Fehler! Java Basics - Anfänger-Themen 4
L non-static Fehler Java Basics - Anfänger-Themen 16
C Fehler beim Speichern (Build projekt) Java Basics - Anfänger-Themen 42
L Methoden Wie Löse ich ext Methoden Aufruf Fehler? Java Basics - Anfänger-Themen 3
F Methoden Bitte Helft mir meinen Fehler zu finden. Möchte in diesem Bankenprogramm durch die Konsoleneingabe auswählen welches Konto reduziert und welches erhö Java Basics - Anfänger-Themen 17
C Fehler bei der Compilierung Java Basics - Anfänger-Themen 1
T Mein Programm hat Fehler Java Basics - Anfänger-Themen 4
S Warum dieser Fehler? Java Basics - Anfänger-Themen 1
B Fehler bei Ausführung Java Basics - Anfänger-Themen 5
Kirby.exe Fehler beim Ausgeben Java Basics - Anfänger-Themen 2
X java.lang.NullPointerException fehler ? Java Basics - Anfänger-Themen 1
L Wo ist der Fehler? Java Basics - Anfänger-Themen 87
J Fehler in Programm: Index -1 out of bounds for length 0 Java Basics - Anfänger-Themen 5
M JOptionPane Fehler bei "Abbrechen" des Fensters Java Basics - Anfänger-Themen 10
N Fehler bei string Attribut! Java Basics - Anfänger-Themen 18
W Wo liegt der Fehler? Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben