Einfach verkette Liste

sngirl2010

Mitglied
Hallo lieber Community. Ich brauche bitte bitte eure Hilfe. Ich schreibe morgen meine erste Klausur und mache zur Vorbereitung gerade die Übungsklausur. Bis zur Aufgabe 5 bin ich gut durchgekommen. Aber jetzt scheiterst. Hier mal die Aufgabe:
public static SSLInt selectOdd(SSLInt list)
Die Klassenmethode soll eine neue Liste erzeugen, die der ubergebenen Liste list entspricht. Allerdings
sollen in der neuen Liste nur noch die ungeraden Zahlen aus der list enthalten sein. Die
ubergebene Liste list darf nicht verandert werden. Die Methode soll die neue Liste zuruckliefern.
Achten Sie darauf, dass sie keine unotigen Listenelemente anlegen.
Diese Klasse ist gegeben:
Code:
public class SSLChar {
public char element;
public SSLChar next;
public SSLChar (int element, SSLChar next) {
this.element = element;
this.next = next;
}
}
Hier ist meine bisherige Lösung:
Code:
public class Aufgabe5 {

    public static void main(String[] args) {
        SSLInt r = new SSLInt(8);
        SSLInt p = new SSLInt(4, r);
        SSLInt o = new SSLInt(7, p);
        SSLInt q = new SSLInt(5, o);
        selectOdd(q);

    }

    public static SSLInt selectOdd(SSLInt list) {
        SSLInt neu = list;
        SSLInt temp = null;
        while (neu != null) {
            if (neu.element % 2 == 0) {
                temp = neu;
            }         
            neu = neu.next;
            }
        return neu;
    }

}
Aus der übergebenen Liste liefert mein Code nur die 8 zurück. Aber soll ja 4 und 8 zurückgeben. Ich finde auf Teufel komm raus keinen Fehler und keine Lösung. Ich bitte bitte gnädigst um eure Hilfe.
 

Meniskusschaden

Top Contributor
Im Moment referenzieren die Listen neu und list dieselbe Liste. Da du die Liste neu zurückgeben willst, müsstest du also die überflüssigen Elemente daraus entfernen, wodurch du sie aber gleichzeitig unerwünschterweise auch aus list entfernen würdest.
Wenn du eine gerade Zahl findest, setzt du temp auf die aktuelle "Rest-Liste", so dass tempnun eine Liste referenziert, die alle Elemente, ab dieser geraden Zahl umfasst. Da du mit temp gar nichts machst, bleibt dieser Fehler aber ohne Konsequenz.
Deine Methode liefert eine Liste zurück, die lediglich das letzte Element der Ursprungsliste enthält (egal, ob gerade oder ungerade).

Du könntest einfach mit einer leeren Liste beginnen und bei jedem Treffer daraus eine neue Liste erzeugen, die den Treffer als zusätzliches Element enthält.
 

sngirl2010

Mitglied
Danke vielmals für die Antwort. Aber ich komme nicht auf die Syntax. Ich habe jetzt den Code so geändert:
Code:
public static SSLInt selectOdd(SSLInt list) {
        SSLInt neu = list;
        SSLInt temp = null;
        while (neu != null) {
            if (neu.element % 2 == 0) {
                int tmp = neu.element;
                temp = new SSLInt(neu.element);
            }
            neu = neu.next;
        }
        return temp;
    }
}
Aber es macht immer noch das selbe.
 

DrZoidberg

Top Contributor
Wieso setzt duneuauflist? Das soll doch eine ganz neue Liste werden.neu = null;macht da mehr Sinn. Und in deiner while Schleife gehst du dann durchlistdurch anstatt durchneu.
 

sngirl2010

Mitglied
So oder wie?
Code:
public static SSLInt selectOdd(SSLInt list) {
        SSLInt neu = null;             
        SSLInt temp = null;
        while (neu != null) {
            if (list.element % 2 == 0) {
                int tmp = list.element;
                temp = new SSLInt(list.element);
            }
            list = list.next;
        }
        return temp;
    }
 

DrZoidberg

Top Contributor

Es sollte while (list != null) { sein.
Und nach der Zeile temp = new SSLInt(list.element); musst du das neu erzeugte SSLInt Objekt noch ans Ende der neuen Liste anfügen.
Alternativ könntest du die Liste auch erst einmal umdrehen. Dann vereinfacht sich der Rest des Codes.
 

sngirl2010

Mitglied
Ok, es tut mir leid, dass ich blöd bin. Aber ich verstehe es nicht. Weiter als dieser Code kann ich nicht:
Code:
public static SSLInt selectOdd(SSLInt list) {
        SSLInt neu = null;             
        SSLInt temp = null;
        while (list != null) {
            if (list.element % 2 == 0) {
                int tmp = list.element;
                temp = new SSLInt(list.element);
                neu = new SSLInt(temp.element);
               
            }
            list = list.next;
        }
        return neu;
    }
 

sngirl2010

Mitglied
Wahrschein sind wir Frauen zu blöd um das hier zu lernen. Es wäre bitte einfach nur sehr nett, wenn jemand hier meinen Fehler korrigieren würde damit ich auch sehe wie das geht.
 

Meniskusschaden

Top Contributor
Die Klasse SSLInt hat offenbar zwei Konstruktoren:
Java:
public SSLInt(int element, SSLInt next);
public SSLInt(int element);
Du hast oben zwar nur den ersten Konstruktor gepostet, deshalb kann man über die Funktionsweise des zweiten nur spekulieren, aber es ist ziemlich offensichtlich, dass der eine Liste erzeugt, die nur aus dem übergebenen Element besteht. Wenn du eine Liste mit mehr Elementen haben möchtest, musst du den ersten Konstruktor verwenden. In deiner main-Methode hast du das ja bereits gemacht.
 

sngirl2010

Mitglied
Also ich danke euch für die Antworten. Und ich verstehe auch, dass ich einen falschen Konstruktor verwende. Ich komme nicht auf die Syntax. Ich programmiere das erste Mal. Programmieren haben wir nur die ersten beiden Semester. Danach kommt meine Vertiefungsrichtung der Elektrotechnik. Ich kämpfe hier nur mit diesem JAVA und ja ich bin zu blöd.
 

sngirl2010

Mitglied
Meine BITTE: BITTE BITTE BITTE korrigiert meinen Code und postet die Korrektur. Ich versuche hier nicht zu schummeln oder die eierlegende Wollmichsau zu seien. Das ist die Aufgabe 5 aus der Probeklausur. Bis dahin habe ich niemanden hier oder sonst wo gefragt und alles selber gelöst. Ich bitte nur um diese Scheiß Aufgabe 5. Ich sitze heute seit knapp 13Uhr und komme nicht auf diese SCHEIß Lösung. Das ist bereits die pure Verzweiflung.
 

sngirl2010

Mitglied
Und die Aufgabe 6 ist das selbe nur iterativ. Ich schreibe morgen diese Kack Klausur und ich bekomme ich es nicht diese drecks Aufgaben zu lösen. MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN!
 

DrZoidberg

Top Contributor
Jedem, der noch keine Erfahrung hat, fallen solche Aufgaben erst einmal schwer. Das gibt sich aber im Laufe der Zeit, solange du nicht aufgibst. Und wenn man Elektrotechnik studiert, sollte man schon zumindest ein wenig programmieren können.
Hier mal zwei mögliche Lösungen. Die erste ist iterativ
Java:
public static SSLInt selectOdd(SSLInt list) {
    SSLInt neu = null;
    SSLInt temp = null;
    while(list != null) {
        if(list.element % 2 == 1) {
            SSLInt next = new SSLInt(list.element, null);
            if(neu == null) {
                neu = next;
                temp = next;
            } else {
                temp.next = next;
                temp = temp.next;
            }
        }
        list = list.next;
    }
    return neu;
}

Und die zweite rekursiv. Die rekursive Lösung ist deutlich kürzer, hat aber den Nachteil, dass sie für lange Listen von mehr als ein paar tausend Elementen nicht funktioniert (führt zu einem Stackoverflow Error).
Java:
public static SSLInt selectOdd(SSLInt list) {
    if(list == null) return null;
    else if(list.element % 2 == 1) return new SSLInt(list.element, selectOdd(list.next));
    else return selectOdd(list.next);
}
 

sngirl2010

Mitglied
letzte Frage: Wie kann ich den return-Wert der Methode anzeigen lassen?
Code:
System.out.println(selectOdd(q));
Bringt mir nur die folgende Ausgabe heraus:
klausur2012.SSLInt@15db9742
Ja, ich vermute ich muss die Ausgabe in einen String umwandeln. Wie macht man das? Ich finde keine passende Syntax(((
 

thecain

Top Contributor
Du kannst die toString Methode von der Listenklasse überschreiben, oder statt ein println in einer Schleife über die Listenelemente gehen und sie so ausgeben
 

DrZoidberg

Top Contributor
Du könntest eine Methode schreiben um die Liste in einen String umzuwandeln.
z.B.
Java:
public static String toString(SSLInt list) {
  String s = "[";
  while(list != null) {
    s = s + list.element;
    if(list.next != null) s = s + ", ";
    list = list.next;
  }
  return s + "]";
}
 

DrZoidberg

Top Contributor
Was meint du damit? Eine Klasse hat keinen Rückgabetyp. Du kannst eine Liste ausgeben mit System.out.println(toString(list))
Oder aber du integrierst die toString Methode in die SSLInt Klasse.
Also so
Java:
public class SSLInt {
  ...
  public String toString() {
    SSLInt list = this;
    String s = "[";
    while(list != null) {
      s = s + list.element;
      if(list.next != null) s = s + ", ";
      list = list.next;
    }
    return s + "]";
  }
}
In dem Fall kannst du einfach schreiben System.out.println(list)
 
X

Xyz1

Gast
Wieso ist "element" denn einmal char und einmal int?
Strings sollte man eigentlich nicht in einer Schleife verknüpfen.
Du kannst auch von außerhalb auf element (und next) zugreifen - sind ja (ausdrücklich) als public vorgegeben.

Gut, dass zw. Hamburg und Ulm nach maps google nur 700-800km liegen. :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Methoden Einfach verkette Liste - int Werte aufsteigend sortieren Java Basics - Anfänger-Themen 1
I einfach verkette Liste Java Basics - Anfänger-Themen 9
llabusch Verkette Listen - Einfach und Doppelt Java Basics - Anfänger-Themen 3
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
R einfach verkettete Liste Java Basics - Anfänger-Themen 1
R einfach verkettete Liste Java Basics - Anfänger-Themen 12
N Erste Schritte HelloWorld möchte einfach nicht laufen Java Basics - Anfänger-Themen 11
K Programm stoppt einfach ohne Grund Java Basics - Anfänger-Themen 4
V einfach verkettete Listen Java Basics - Anfänger-Themen 10
N Best Practice Doppelte und einfach Anführungsstriche in Runtime.getruntime().exec() Java Basics - Anfänger-Themen 6
O Exception behandlung einfach Ueben mit Fakt! Java Basics - Anfänger-Themen 10
C Methoden Über eine einfach verkettete Liste Java Basics - Anfänger-Themen 8
Hanschyo Programm schließt sich einfach Java Basics - Anfänger-Themen 2
O Einfach verkettete Liste - Revert Methode Java Basics - Anfänger-Themen 1
S Einfach verkettete Liste Element an bestimmter Position einfügen Java Basics - Anfänger-Themen 24
Hacer Operationen einfach verketteter Listen Java Basics - Anfänger-Themen 22
R Erste Schritte Verkettete Liste will einfach nicht in meinen Schädel Java Basics - Anfänger-Themen 11
V Codezeile wird einfach nicht ausgeführt Java Basics - Anfänger-Themen 23
M Quadrat zeichnen einfach bitte! Java Basics - Anfänger-Themen 2
J Einfach verkettet List: Ausgabe ohne null Java Basics - Anfänger-Themen 11
K Einfach Verkettete Liste - addFirst() Java Basics - Anfänger-Themen 7
N Einfacher Rechner (für mich nicht so einfach) Java Basics - Anfänger-Themen 5
M Array in ein Array übertragen (möglichst einfach) Java Basics - Anfänger-Themen 6
T Input/Output Daten/Objekte einfach speichern Java Basics - Anfänger-Themen 5
R Methoden... ich vesteh sie einfach nicht Java Basics - Anfänger-Themen 15
X Einfach verkettete Liste, keine Fehlermeldung Programm friert ein Java Basics - Anfänger-Themen 4
C Erste Schritte Problem mit der Division von Koeffizienten... oder einfach nur irgendwlechen zahlen Java Basics - Anfänger-Themen 10
D Klassen Klassen, Objekte, Konstruktor - einfach erklärt Java Basics - Anfänger-Themen 12
B Variable wird einfach so wieder auf "null" gesetzt Java Basics - Anfänger-Themen 12
T Elemente im Vector werden einfach überschrieben! Java Basics - Anfänger-Themen 3
X Einfach Verkettete Liste Java Basics - Anfänger-Themen 16
S ich begreife es einfach nicht -> zweck der Schnittstellen Java Basics - Anfänger-Themen 27
J Interface Wie funktioniert das mit den Interfaces. Ich verstehe es einfach nicht! :( Java Basics - Anfänger-Themen 15
W Java-Programm als Icon mit Doppelklick einfach öffnen ? Java Basics - Anfänger-Themen 3
M Layout einfach bilden Java Basics - Anfänger-Themen 4
I Weiß einfach nicht mehr weiter... Java Basics - Anfänger-Themen 3
K Datentypen Einfach/Doppelt verkettete Liste Java Basics - Anfänger-Themen 4
N einfach verkettete liste fehler Java Basics - Anfänger-Themen 5
O Wie kann man das einfach lösen? (dynamisch viele Attribute) Java Basics - Anfänger-Themen 6
N einfach verkettete liste Java Basics - Anfänger-Themen 3
A If-Schleife spinnt - ganz einfach Code - Riesen Problem :) Java Basics - Anfänger-Themen 9
Luk10 einfach animation Java Basics - Anfänger-Themen 2
B OOP Einfach verkettete Liste - rekursive Methoden Java Basics - Anfänger-Themen 1
E JMC - Dlls einbinden - möglichst einfach Java Basics - Anfänger-Themen 8
S einfach verkettete Liste Java Basics - Anfänger-Themen 19
H Typumwandlung String --> Int (ganz einfach) Java Basics - Anfänger-Themen 9
O Observer - Einfach erklärt? Java Basics - Anfänger-Themen 5
T Einfach verkettete Liste: Wie Elemente löschen? Java Basics - Anfänger-Themen 4
K Ich verstehe switch einfach nicht Java Basics - Anfänger-Themen 4
M jar-Datei einfach umbenennen? Java Basics - Anfänger-Themen 8
D Einfach verkettete Liste Java Basics - Anfänger-Themen 20
S Filewriter schreibt einfach nicht Java Basics - Anfänger-Themen 6
G Opjektorientierte Programmierung (OOP). einfach für euch Java Basics - Anfänger-Themen 4
X WAV conversion ist einfach nicht möglich Java Basics - Anfänger-Themen 2
J jar erstellen. Es klappt einfach nicht Java Basics - Anfänger-Themen 14
L Eingeben Rechnen Ausgeben - Leider nicht so einfach Java Basics - Anfänger-Themen 31
P einfach frage zur vererbung Java Basics - Anfänger-Themen 9
G Frank A. - ports einfach öffnen und schließen Java Basics - Anfänger-Themen 3
M Caeser Verschlüsselung ganz einfach(nicht für mich) Java Basics - Anfänger-Themen 6
L while wird einfach übersprungen? Java Basics - Anfänger-Themen 4
D einfach berechnung einer onlinezeit Java Basics - Anfänger-Themen 25
B Thread will einfach nicht stoppen Java Basics - Anfänger-Themen 12
B Packages einfach kopieren? Java Basics - Anfänger-Themen 13
N Mein Applet findet -online- einfach die Klasse nicht ! Java Basics - Anfänger-Themen 6
S Java rundet einfach auf 0 Java Basics - Anfänger-Themen 2
C einfach verkettete Liste -> Elemente vertauschen Java Basics - Anfänger-Themen 2
L Ein Bild auf ein JFrame legen. nicht so einfach? =( Java Basics - Anfänger-Themen 11
M Tablelayout einbinden - ich schaff's einfach nicht Java Basics - Anfänger-Themen 16
D Button Text will einfach nicht erscheinen Java Basics - Anfänger-Themen 6
M Methoden. ich versteh das einfach nicht! Bitte helfen! Java Basics - Anfänger-Themen 4
H Kann man in Java einfach einen Beep erzeugen Java Basics - Anfänger-Themen 2
C einfach aber komisch Java Basics - Anfänger-Themen 5
R einfach verkettete Liste, intersect Java Basics - Anfänger-Themen 4
P Restart Button für einfach Applikation Java Basics - Anfänger-Themen 7
H RAF geht einfach nicht Java Basics - Anfänger-Themen 12
D RegEx Probleme - wahrscheinlich zu einfach. Java Basics - Anfänger-Themen 2
E einfach verkettete liste, nullPointerException Java Basics - Anfänger-Themen 5
H Einfach Datenübergabe Java Basics - Anfänger-Themen 4
S RegEx Syntax - ich verstehe sie einfach nicht! Java Basics - Anfänger-Themen 3
V Teil eines Programms funktioniert einfach nicht Java Basics - Anfänger-Themen 2
V If Schleife wird beim ausführen einfach ignoriert Java Basics - Anfänger-Themen 4
D Einfach Leerzeile einfügen ? Java Basics - Anfänger-Themen 2
G Owner von JDialog;Komme einfach nicht weiter Java Basics - Anfänger-Themen 4
B Applet geht einfach nicht Java Basics - Anfänger-Themen 16
S UIManager kann einfach nicht aufgelöst werden Java Basics - Anfänger-Themen 4
R Einfach if-Abfrage Java Basics - Anfänger-Themen 7
B Eine Linie zeichnenmit Java, ich verstehe das einfach nicht Java Basics - Anfänger-Themen 4
A Einfach, gut erklärte Übungen!!! Java Basics - Anfänger-Themen 3
thor_norsk Verkette Liste Java Basics - Anfänger-Themen 27
O Doppelt verkette Liste Element löschen Java Basics - Anfänger-Themen 15
J Doppelt verkette Liste ich bitte um Hilfe Java Basics - Anfänger-Themen 4
C Zyklisch verkette Liste - Pop() methode implementieren Java Basics - Anfänger-Themen 2
H Datentypen Doppelte Verkette Liste - Verständnissproblem Java Basics - Anfänger-Themen 5
C verkette liste sortieren? Java Basics - Anfänger-Themen 7
W Rekursion und verkette Liste Java Basics - Anfänger-Themen 5
K Verkette Listen Java Basics - Anfänger-Themen 13
K Verkette Listen ? Java Basics - Anfänger-Themen 6
L doppelt verkette Liste Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben