Baumstruktur mit Klassen/ Array



  • Hi

    folgendes Problem. gegen ist ein String. pro zeile enthält er bestimmte elemente welche seperat geparst werden sollen.

    idee ist wie folgt

    KlasseStringFile:
    {

    ...
    KlasseLinie[] linie;

    //für die i'te Zeile(des String) mache folgendes -> Schleife...:
    linie[i] = new KlasseLine(zeile); // Zeile vom typ String
    }

    KlasseLinie:
    {
    KlasseValue value;

    //Konstruktor
    public KlasseLinie(){
    value = new KlasseValue(zeile);
    }
    }

    KlasseValue:
    {
    public static val1;
    public static val2;

    //parse Line und setze werte
    }

    warum geht das nicht ??? das dumme ist das keinerlei fehlermeldungen kommen.
    was ich zum schluss haben möchte ist sowas wie:

    KlasseStringLine.KlasseLinie[i].KlasseValue.val1;
    KlasseStringLine.KlasseLinie[i].KlasseValue.val2;

    da ich mit multiplen werten arbeite kann ich dafür keine liste oder ähnliches nehmen. asußerdem habe ich schonmal etwas ähnliches in c geschrieben, da liefs problem los. hoffe jemand kann mir meinen fehler sagen oder sonst weiterhelfen.
    thx.

    pain



  • ehm... soll das da oben java-code sein?
    (wie hast du die klassen definiert?)

    und welcher konstruktor soll aufgerufen werden für KlasseLinie?

    Irgendwie ziemlich wirr...



  • pseudocode sagt dir was ?
    is ne frage für fortgeschrittene. deswegen dacht ich das die abkürzungen(pseudocode) ok sind. wenn ich den vollen code hinschreibe liest sich das kein mensch durch.
    ich seh den code als eindeutig an. falls du dich in der materie auskennst sag bescheid dann kann ich dir auch den vollen code hinschreiben

    pain



  • oh.. achso. frage für fortgeschrittene.
    dann sag ich lieber nichts.



  • wäre vielleicht noch interessant, was denn nicht geht 😃

    Ansonsten muss ich Tendor recht geben, sieht dein Pseudocode recht wirr aus.
    z.B. sollte man auch beim Pseudocode die gleichen Bezeichner nehmen, wenn man auch die gleichen Variablen/Klassen meint
    z.B:
    KlasseStringLine 😕 .KlasseLinie[i].KlasseValue.val1;
    soll wahrscheinlich KlasseStringFile heissen.

    Ansonsten, seh ich da nichts, warum das nicht gehen sollte.

    Und noch nebenbei, sauberer OOP-Programmierstil wäre es, wenn Du keine public Instanzvariablen hättest, also alles über Getter-/Settermethoden realisierst. Damit stellst Du sicher, dass Zugriffe auf diese Klasse kontrolliert ablaufen und nicht jeder wild irgendwelche Werte ändern kann.

    Beispiel Klasse Auto:

    Auto hat kmZähler und Tank

    wären diese Variablen public, könnte jeder diese nach belieben verändern.

    Machst du das nun aber über get/setmethoden, z.B:

    public void setKM(int km){
        if(km > kmZähler){
            kmZähler = km;
        }
    }
    

    so kannst du steuern, dass Anwender dieser Klasse den Zählerstand nicht zurücksetzen können. (Zumindest nicht auf dem normalen Weg 😉 )



  • Fehler gefunden:

    Ich wusste nicht das man in Java Array/Felder mit einer festen länge initialisieren muss. daran lags. ich dachte java unterstütz von sich aus dynamische felder. so kann man irren.in c++ hatte ich deswegen keine probs da ich da gleich dynamische felder gemacht habe.

    zu meinem code. okok. ich geb ja zu sauber geschrieben is nu nicht grad. hier und da hätt man noch was einrücken können. is ja alles richtig.

    ich hab nur die erfahrung gemacht das sich großen code sogute wie keiner durchliest. das wollt ich vermeiden. und ich bin mir immer noch sicher das:

    klasse1.klasse2[i].klass3.val

    deutlich macht was ich haben möchte (das wird in so ziemlich jeder OO sprache so notiert). nungut man irrt halt auch mal.

    noch zu den get/set methoden. is ja eigentlich richtig. mach ich auch immer.
    aber in diesem speziellen fall stellen die klassen für mich eine struktur dar, haben also einen festen typ. und bei typen findet man eher selten get/set methoden. ich kann das dann halt in meinem mikrokosmos als vollständiges objekt verwenden und es sieht einfach besser aus im code. by the way ich gehöre zu der sorte coder die bis auf atomebene kapseln 🙂

    so denn problem gelöst und alle was gelern.besten 🙂

    pain



  • achja, falls jemand der syntax interesiert:

    Klasse1[] klasse1;

    klasse1 = new Klasse[10] // 10 = länge des Feldes, als bsp.
    klasse1[i] = new Klasse(...);

    pain



  • pain schrieb:

    ...ich dachte java unterstütz von sich aus dynamische felder.

    *g* Java ist doch kein VB 😃 😃



  • nur so VB unterstützt keine dynamischen Arrays (zumindest nicht direkt)
    allerdings ist das ganze dort wesentlich einfacher zu machen als in java 🙂

    pain



  • Wenn Du dynamisches Array haben möchtest, empfehle ich Dir mal die ArrayList.
    Ist ein Container und sehr leicht zu handhaben.


Anmelden zum Antworten