Anzeige:
Ergebnis 1 bis 12 von 12

Thema: ArrayList Inhalt in while Schlaufe prüfen/vergleichen

  1. #1
    Registrierter Benutzer
    Registriert seit
    10.03.2002
    Ort
    Neuenhof
    Beiträge
    23

    ArrayList Inhalt in while Schlaufe prüfen/vergleichen

    Hallo Leute

    In einer QuickSort Klasse wird ein ListArray übergeben und soll sortiert werden.
    Nun habe ich das Problem, dass ich in einer while Schlaufe prüfe ob ein HI Wert (Inhalt des Arrays) grösser ist als der LO Wert:

    Hier ein Beispiel eines "normalen" Arrays
    Code:
    while (list[hi].getMInstanz().compareTo(Wert) >= 0 && lo < hi) {
    				hi--;
    			}
    			while (list[lo].getMInstanz().compareTo(Wert) < 0 && lo < hi) {
    				lo++;
    			}
    Nun habe ich das Problem, dass ein ArrayList zuerst gecastet werden muss, bis man auf den Wert zugreifen kann.
    zBsp.:
    Code:
    while ((Daten ti = (Daten) LISTE.get(HI)) ti.compareTo(Wert) >= 0 && lo < hi) {
    				hi--;
    ...
    Hier muss der Eintrag aus dem ArrayList in ein Datenformat "Daten" gecastet werden und dann auf diesem Objekt die Methode "get" aufgerufen und diese dann verglichen werden.

    Dies funktioniert natürlich nicht.
    Kann mir jemand hierbei helfen?

    Natürlich steht die Variante (Methode) toArray() zur Verfügung, mit welcher ich das ArrayList zuerst in ein "normales" Array umkopiere und nach der Sortierung wieder in ein ArrayList kopieren muss.
    Jedoch erscheint mir diese Variante zu "unschön".

    Hat jemand eine Idee

    Gruss
    Che
    Mein PC :
    PowerMac G4@450 Dual 1.5 GB RAM

    iBook G4 1Ghz
    768MB RAM

  2. #2
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Ich nehme mal an, du hast auf die Klasse Daten Zugriff; Dann schreib doch einfach eine Funktion Daten.getValueAsInt(), welche dir einen Int-Wert zurückgibt, welchen du vergleichen kannst (oder was auch immer du vergleichen willst...)

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  3. #3
    Registrierter Benutzer
    Registriert seit
    10.03.2002
    Ort
    Neuenhof
    Beiträge
    23
    Verstehe ich nicht!
    Die Klasse Daten ist nicht statisch. Im ArrayList sind viele Objekte des Datentyps Daten.
    Code:
    public class CDaten {
    	private String mUserName;
    	private String mTransaction;
    	private int mUsedCounter;
    	
    	public String getMTransaction() {
    		return mTransaction;
    	}
    	public void setMTransaction(String transaction) {
    		mTransaction = transaction;
    	}
    	public int getMUsedCounter() {
    		return mUsedCounter;
    	}
    	public void setMUsedCounter(int usedCounter) {
    		mUsedCounter = usedCounter;
    	}
    	public String getMUserName() {
    		return mUserName;
    	}
    	public void setMUserName(String userName) {
    		mUserName = userName;
    	}
    }
    Mein PC :
    PowerMac G4@450 Dual 1.5 GB RAM

    iBook G4 1Ghz
    768MB RAM

  4. #4
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Aber auf den Quelltext von "daten" hast du Zugriff?

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  5. #5
    Registrierter Benutzer
    Registriert seit
    10.03.2002
    Ort
    Neuenhof
    Beiträge
    23
    Ja.
    Hab ich ja auch geschrieben. (Daten == CDaten) Im Beispiel steht Daten, sollte aber CDaten stehen

    Gruss
    Che
    Mein PC :
    PowerMac G4@450 Dual 1.5 GB RAM

    iBook G4 1Ghz
    768MB RAM

  6. #6
    Registrierter Benutzer
    Registriert seit
    29.09.2006
    Ort
    Helsinki
    Beiträge
    154
    Zitat Zitat von CheGuevara Beitrag anzeigen
    Nun habe ich das Problem, dass ein ArrayList zuerst gecastet werden muss, bis man auf den Wert zugreifen kann.

    Code:
    while ((Daten ti = (Daten) LISTE.get(HI)) ti.compareTo(Wert) >= 0 && lo < hi) {
    				hi--;
    ...
    Hier muss der Eintrag aus dem ArrayList in ein Datenformat "Daten" gecastet werden und dann auf diesem Objekt die Methode "get" aufgerufen und diese dann verglichen werden.

    Dies funktioniert natürlich nicht.
    Kann mir jemand hierbei helfen?
    Das rot eingefärbte ist schonmal kein Java, ich hoffe, das hast Du nicht wirklich versucht...

    Ich ignoriere jetzt mal den gesamten Rest und nehme mir nur die Bedingung der while-Schleife vor:

    Code:
    while (((Daten)(LISTE.get(HI))).compareTo(Wert) >= 0 && lo < hi )
    Das müsste eigentlich funktionieren, denn wofür hast Du denn die Referenz ti noch extra casten wollen? Brauchst Du die später noch? Kann eigentlich nicht sein, denn die einzig wichtigen Variablen sind doch die beiden pointer hi und lo, oder?

    So, ich geh' jetzt pennen.

    So long,
    Liberty
    Geändert von Liberty (09-05-2007 um 11:07 Uhr)
    Friedliebender Soldat im ganz persönlichen Auslandseinsatz

  7. #7
    Registrierter Benutzer
    Registriert seit
    07.05.2003
    Beiträge
    127
    Sollte nicht CDaten Comparable sein? Erst dann macht doch compareTo() Sinn, oder?
    Code:
    public class CDaten implements Comparable {
        public int compareTo( Object other ) {
            if( this.mUserName.compareTo( other.mUserName ) <= 0 ) {
                return -1;
            }
    //...
        }
    }
    Sonst bringt ein Vergleich eigentlich wenig.

    HTH
    mamue

  8. #8
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    Warum willst Du die Sortierung neu implementieren: Implementier Comparable und benutz dann das hier: http://java.sun.com/j2se/1.4.2/docs/...java.util.List)

    fs111
    ....::::Mein Blag::::....

  9. #9
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Oder eben: Du schreibst eine Funktion in CDaten, welche dir einen Wert zurückgibt, den du einfach vergleichen kannst (bspw. int, double,...)

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  10. #10
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    Zitat Zitat von bischi Beitrag anzeigen
    Oder eben: Du schreibst eine Funktion in CDaten, welche dir einen Wert zurückgibt, den du einfach vergleichen kannst (bspw. int, double,...)

    MfG Bischi
    Ähm, genau das macht Comparable ja: http://java.sun.com/j2se/1.4.2/docs/...omparable.html
    ....::::Mein Blag::::....

  11. #11
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Zitat Zitat von fs111 Beitrag anzeigen
    Ähm, genau das macht Comparable ja: http://java.sun.com/j2se/1.4.2/docs/...omparable.html
    Ja - nur musst du dann mit allen möglichen Datentypen vergleichen können - das ginge eventuell sonst einfacher (ist dann natürlich weniger schön...)

    Mfg Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  12. #12
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    Code:
    public class CDaten implements Comparable<CDaten> {
    public int compareTo(CDaten other ) {
    /*...
    Problem gelöst

    Falls es < 1.5 sein muss soll eine ClassCastException bei unvergleichbaren Objekten geschmissen werden.

    Falls es sich um eine Übungsaufgaben handelt (z.B. um Quicksort zu implementieren ) sollte die Lösung, die Liberty gegeben hat schon ausreichen.
    Seine Rätselhaftigkeit wird nur durch seine Macht übertroffen!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •