dynamische Datenstruktur

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • dynamische Datenstruktur

    Hallo Leute,

    mein Prof gab uns eine Hausaufgabe auf in der wir das erste mal eine GUI erstellen sollen.

    Kurz zum Programm. Es soll eine Sequenz mit jeweils 2sec Zeitverzögerung zwischen den Elementen angezeigt werden.
    Diese sollen dann vom User per Buttons nachgemacht werden (Die Möglichkeit der Eingabe während der Anzeige der Sequenz kann vernachlässigt werden).
    Bei den Elementen handelt es sich um Himmelsrichtungen.

    Bei erfolgreicher Eingabe, wird eine neue Sequenz gebildet + 1 Element mehr. Ist die Eingabe fehlerhaft soll die Sequenz erneut Ausgegeben werden.

    Nun weis ich nicht wie ich das am besten mache, da ich bisher noch kein Programm mit einer dynamischen Struktur programmiert hab.
    Wir haben in der Vorlesung zwar verkettete Listen und doppelt verkettete Listen in C++ kurz besprochen, doch hab immer noch Probleme beim Verständnis zur Funktionsweise.
    Gibt es auch noch andere simplere dynamische Strukturen.

    Ein weiteres Problem hab ich bei der Umsetzung.
    Ich hab mir einmal überlegt die Sequenz, also die Instanz davon zu löschen und eine neue erzeugen zulassen + einen weiteren Platz für ein Element.
    Oder ich lasse die Elemente der Sequenz überschreiben und füge ein weiteres hinzu.
    Würde das beides funktionieren, wenn ja welche Variante wäre wohl die bessere Wahl.

    Gruß Nobody
    "Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer."
  • Ne ne, ich bin schon im richtigen Forum.
    Das ganze soll in Java geschrieben sein.

    nobody special schrieb:

    Nun weis ich nicht wie ich das am besten mache, da ich bisher noch kein Programm mit einer dynamischen Struktur programmiert hab.
    Wir haben in der Vorlesung zwar verkettete Listen und doppelt verkettete Listen in C++ kurz besprochen, doch hab immer noch Probleme beim Verständnis zur Funktionsweise.
    Gibt es auch noch andere simplere dynamische Strukturen.
    Ich hat bisher nur in C++ dynamische Strukturen aber nicht in Java. Das wollt ich damit sagen.
    ich werde zur Zeit mir mehreren Programmiersprachen gequält^^

    Ist die LinkedList notwendig/sinnvoll für meinen Anwendungsfall? Soweit ich das weis besitzt die ja 2 Pointer auf das nächste und vorherige Elemente.
    Womit ich halt viel mehr Funktionen zur Auswahl hab, die ich aber gar nicht benötige.
    (Unter der Annahme die in Java besitzt die selben Eigenschaften wie in C++)

    Ich such halt was simples, das nicht so zeit aufwändig ist, da ich noch die GUI machen muss.
    Bei Google hab nur Themen zu verkette Listen gefunden.
    "Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer."
  • Pointerrechnung gibt es in java nicht.
    Verabschiede dich von dieser Denkweise, bei java.

    GUIs kannst du in java mit verschiedenen Frameworks erstellen.
    Häufig wird Swing genommen. Eine Alternative ist AWT. Beides wird von java schon mitgeliefert.
    Hier ein keines Tutorial für Swing:
    zum.de/Faecher/Inf/RP/Java/Dok…l%20%20Einfache%20GUI.htm

    In einem Framwork hast du viele Klassen, die Methoden haben, die du vielleicht garnicht braucht. Das ist nichts ausergewöhnliches (in keiner Programmiersprache). Listen, Sets und Maps sind Klassen, um die man in Java nicht drum rum kommt. Sie sind einfach praktisch und auch hinreichend getestet und schnell. Es gehört einfach zum Java-Basiswissen damit umgehen zu können:
    [Blockierte Grafik: http://www.programcreek.com/wp-content/uploads/2009/02/java-collection.jpg]
  • Ah okay danke,
    ich habs mal umgesetzt doch nun scheint irgendwo der wurm drin zu sein.

    hier der Code:

    Quellcode

    1. package App;
    2. public class C_RandomGenerator {
    3. public float getRandom() {
    4. return m_Random;
    5. }
    6. public boolean setRandom() {
    7. m_Random = (float) Math.random();
    8. if (m_Random <= 0.25) {
    9. if ((m_Random > 0.25) && (m_Random <= 0.5)) {
    10. if ((m_Random > 0.5) && (m_Random <= 0.75)) {
    11. if (m_Random > 0.75) {
    12. setElement('W');
    13. return true;
    14. }
    15. setElement('E');
    16. return true;
    17. }
    18. setElement('S');
    19. return true;
    20. }
    21. setElement('N');
    22. return true;
    23. }
    24. return false;
    25. }
    26. public char getElement() {
    27. return m_Element;
    28. }
    29. public void setElement(char element) {
    30. m_Element = element;
    31. }
    32. private float m_Random;
    33. private char m_Element; // North,South,East,West
    34. }
    Alles anzeigen


    RandomGenerator soll durch Math.random eine zufällige Zahl erzeugen die dann per
    If-anweisungen ein Element vom Typ char erstellt.

    RandomSequenz:

    Java-Quellcode

    1. package App;
    2. import java.util.ArrayList;
    3. @SuppressWarnings("serial")
    4. public class C_RandomSequenz extends ArrayList {
    5. }


    Meine dyn. Struktur

    C_Application:

    Quellcode

    1. package App;
    2. public class C_Application {
    3. public static void main(String[] _Arg) {
    4. C_RandomGenerator Random = new C_RandomGenerator();
    5. C_RandomSequenz Sequenz = new C_RandomSequenz();
    6. for (int i = 0; i < 5; i++) {
    7. Random.setRandom();
    8. Sequenz.add(Random.getElement());
    9. System.out.println(Random.getRandom());
    10. }
    11. System.out.println(Sequenz);
    12. }
    13. }
    Alles anzeigen



    Beim Testen lässt er öfters die Liste leer oder füllt diese nur mit N

    Hier mal ein paar der Ergebnisse:

    0.30374542
    0.4214
    0.6520877
    0.5160282
    0.4546387
    [ , , , , ]



    0.65911037
    0.6065944
    0.17765294
    0.64711386
    0.34002057
    [ , ,N,N,N,]

    Ich weis wirklich nicht woran es liegt.

    Edit: o0 oh warum funktionieren den die Codetags hier nicht so richtig?
    Edit 2 (von Hafner): Hab den Code für dich mal lesbar formatiert.
    "Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer."
  • Ach ja, und bisher ist mir nicht klar, warum du die Unterklasse C_RandomSequenz brauchst. Du kannst auch die ArrayList direkt verwenden.

    Quellcode

    1. package App;
    2. import java.util.ArrayList;
    3. public class C_Application {
    4. public static void main(String[] _Arg) {
    5. C_RandomGenerator Random = new C_RandomGenerator();
    6. ArrayList<Character> Sequenz = new ArrayList<Character>();
    7. for (int i = 0; i < 5; i++) {
    8. Random.setRandom();
    9. Sequenz.add(Random.getElement());
    10. System.out.println(Random.getRandom());
    11. }
    12. System.out.println(Sequenz);
    13. }
    14. }
    Alles anzeigen


    Du kannst der Liste mittels der spitzen Klammern auch sagen welche Objekte sie beinhalten soll. Das ist viel typsicherer.

    In Java gelten im Überigen auch andere Konventionen als für C++. So schreibt man z.B. und Packetnamen immer klein. Bei VareablenNamen ist der Erste buchstabe klein.
    package.name
    variableName
    CONSTANT_NAME
    ClassName
  • Hafner schrieb:

    Es liegt an deinem If

    Ins erste if gehgt er nur rein, wenn die Zahl maximal 0.25 erreicht.
    Das sorgt dafür, dass im zweiten if die Bedingung immer false ist.
    AHHH....
    Das ich das nicht gesehen hab. Danke

    Hafner schrieb:

    Ach ja, und bisher ist mir nicht klar, warum du die Unterklasse C_RandomSequenz brauchst. Du kannst auch die ArrayList direkt verwenden.
    Die brauch ich nun nicht mehr, ich aber vorher auch ein etwas anderes Konzept dafür verfolgt.
    Ist aber schon geändert.

    Hafner schrieb:

    Du kannst der Liste mittels der spitzen Klammern auch sagen welche Objekte sie beinhalten soll. Das ist viel typsicherer.

    public class C_RandomSequenz extends ArrayList<Character> bzw. ArrayList<Character> Sequenz = new ArrayList<Character>();
    <Charakter> ist doch ein Objekt.

    Hafner schrieb:

    In Java gelten im Überigen auch andere Konventionen als für C++. So schreibt man z.B. und Packetnamen immer klein. Bei VareablenNamen ist der Erste buchstabe klein.
    package.name
    variableName
    CONSTANT_NAME
    ClassName
    Wir mussten unseren eigenen Codestyle für C++ entwerfen und ich hab mich dort an den Style vom meinem Prof. orientiert.
    Den verwende ich halt auch nun mal in Java.

    Ich danke dir nochmals :)
    "Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer."
  • Java hat ein Autoumwandlungs-Feature zwischen den Primitiven und den ihnen Zugeordneten Objekten. Deswegen kannst du die Liste so verwenden, wie ich sie dir gezeigt habe. Eigentlich verwendest du sie schon so. Denn du hast ohne die spitzen Klammern eigentlich nur eine Liste aus Object. Deswegen wird char auch zu Character umgewandelt.

    de.wikibooks.org/wiki/Java_Standard:_Primitive_Datentypen