Schleife funktioniert nicht richtig

F1NISH

Mitglied
Hallo liebes Java Forum,

und zwar funktioniert meine Schleife nicht so wie ich es haben will und ich habe nach meinen Kenntnissen schon alles ausprobiert, aber finde keine Lösung. Ich erzeuge aus einer XML Datei eine ArrayListe mit Objekten, welche ich dann auswerte und je nach Attributen in zwei weitere Listen (regelnAktiv, regelnInaktiv) abspeicher. Nun möchte ich prüfen ob das Objekt aus der neu erzeugten ArrayListe schon in den beiden anderen Listen (aktiv,Inaktiv) vorhanden ist bzw. existiert und wenn NICHT dann soll es in die regelnAktiv Liste. Hier meine Schleife dazu:
Code:
            for (Regel r : neueListe) {
                for (Regel t : regelnInaktiv) {
                    for (Regel x : regelnAktiv) {
                        if (regelnInaktiv.contains(r) == false && regelnAktiv.contains(r) == false) {
                            used.add(r);
                        }

                    }
                }
            }

Ich hoffe ihr habt weitere Ideen !

Viele Grüße
 

krgewb

Top Contributor
Java:
for (Regel r : neueListe) {
    if (regelnInaktiv.contains(r) || regelnAktiv.contains(r)) {
        used.add(r);
    }
}
 

F1NISH

Mitglied
Java:
for (Regel r : neueListe) {
    if (regelnInaktiv.contains(r) || regelnAktiv.contains(r)) {
        used.add(r);
    }
}

Hier wird das Objekt ja hinzugefügt wenn in beiden Listen es schon vorhanden ist, aber es soll genau andersrum sein, dass es hinzugefügt wird wenn es in BEIDEN NICHT vorhanden ist. Habe auch true gegen false ausgetauscht, funktioniert immer noch nicht und jedes Objekt wird einfach hinzugefügt.
 

mihe7

Top Contributor
Wenn die Gleichheit der Objekte sich nicht über die Referenz definiert, musst Du natürlich equals überschreiben. Unabhängig davon hat Dein Code ein Laufzeit-Problem, weil Du mehrere Schleifen überflüssigerweise verschachtelst.

Java:
for (Regel r : neueListe) {
    if (!regelnInaktiv.contains(r) && !regelnAktiv.contains(r)) {
        used.add(r);
    }
}
Der Name "used" ist hier auch nicht ganz klar, liegt aber evtl. daran, dass es sich nur um einen Ausschnitt handelt.
 

F1NISH

Mitglied
Wenn die Gleichheit der Objekte sich nicht über die Referenz definiert, musst Du natürlich equals überschreiben. Unabhängig davon hat Dein Code ein Laufzeit-Problem, weil Du mehrere Schleifen überflüssigerweise verschachtelst.

Java:
for (Regel r : neueListe) {
    if (!regelnInaktiv.contains(r) && !regelnAktiv.contains(r)) {
        used.add(r);
    }
}
Der Name "used" ist hier auch nicht ganz klar, liegt aber evtl. daran, dass es sich nur um einen Ausschnitt handelt.

Aber ich nutze die equals Methode doch garnicht, sondern nur die contains Methode. Das mit dem Laufzeit Problem hab ich mir schon gedacht, nur so dachte ich ich durchlaufe die drei Listen gleichzeitig und es funktioniert. Wenn ich deine Schleife laufen lasse, dann trifft irgendwie immer noch alles zu und alle Objekte werden der "used" ArrayListe hinzugefügt.
 

Robat

Top Contributor
Ja und die contains Methode prüft intern ob dein übergebenes Objekt schon in der Liste ist, in dem es die Objekt via equals Methode vergleicht ;)
 

mihe7

Top Contributor
Aber ich nutze die equals Methode doch garnicht, sondern nur die contains Methode.
contains verwendet equals ;)

Die Sache ist ganz einfach: um festzustellen, ob ein Objekt in einer Liste ist, müssen die Objekte der Liste mit dem gesuchten Objekt verglichen werden. Für den Vergleich von Objekten ist die equals-Methode vorgesehen.

Wenn ich deine Schleife laufen lasse, dann trifft irgendwie immer noch alles zu und alle Objekte werden der "used" ArrayListe hinzugefügt.
Wie gesagt: Du musst equals überschreiben, sofern die Gleichheit nicht über die Referenz definiert ist.
 

F1NISH

Mitglied
Achso okay das war mir nicht bewusst. Wie überschreibe ich sie denn, dass sie alle 4 Attribute auf Gleichheit prüft ?
So sieht meine Klasse aus:
Java:
public class Regel implements java.io.Serializable {
    public String lasthit;

    public String firsthit;

    public String hitcounter;

    public String name;

    public Regel(String a, String b, String c, String d) {
        setlh(a);
        setfh(b);
        sethc(c);
        setName(d);
    }
 

mihe7

Top Contributor
Java:
import java.util.Objects;
...
@Override
public boolean equals(Object o) {
    if (o == null || o == this || !(o instanceof Regel)) {
        return o == this;
    }

    Regel r = (Regel) o;

    return Objects.equals(lasthit, r.lasthit) && 
            Objects.equals(firsthit, r.firsthit) &&
            Objects.equals(hitcounter, r.hitcounter) &&
            Objects.equals(name, r.name);
}

@Override
int hashCode() {
    return Objects.hash(lasthit, firsthit, hitcounter, name);
}
 

F1NISH

Mitglied
Java:
import java.util.Objects;
...
@Override
public boolean equals(Object o) {
    if (o == null || o == this || !(o instanceof Regel)) {
        return o == this;
    }

    Regel r = (Regel) o;

    return Objects.equals(lasthit, r.lasthit) &&
            Objects.equals(firsthit, r.firsthit) &&
            Objects.equals(hitcounter, r.hitcounter) &&
            Objects.equals(name, r.name);
}

@Override
int hashCode() {
    return Objects.hash(lasthit, firsthit, hitcounter, name);
}

Danke für deine Hilfe nun bekomme ich diese Fehlermeldung.

Java:
java.io.InvalidClassException: Regel; local class incompatible: stream classdesc serialVersionUID = -5231430306337615413, local class serialVersionUID = -8227139035629819211
    at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:699)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1885)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
    at java.util.ArrayList.readObject(ArrayList.java:797)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1170)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2178)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2069)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
    at Main.main(Main.java:80)
 

mrBrown

Super-Moderator
Mitarbeiter
Du nutzt wohl irgendwo Java-Serialisierung, und versucht Klassen in einer "alten Version" zu laden.

Wenn du keine Felder der Klasse geändert hast, kannst du die serialVersionUID fest setzen (auf den alten Wert der in der Exception steht), das sollte den Fehler beheben.
Solltest dich dann aber noch mal damit beschäftigen, warum der Fehler kommt, und was es mit der serialVersionUID auf sich hat :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W While Schleife funktioniert nicht ganz Allgemeine Java-Themen 4
H do-while Schleife funktioniert nicht wie ich es möchte Allgemeine Java-Themen 7
W While-ESC-Schleife funktioniert nicht Allgemeine Java-Themen 3
S Schleife funktioniert nicht Allgemeine Java-Themen 2
V Schleife funktioniert nicht wie gewünscht Allgemeine Java-Themen 5
T Verschachtelte For-Schleife gibt falschen Wert zurück, Abbruchbedingung evtl. falsch? Allgemeine Java-Themen 9
A verschachtelte for-Schleife in einen Stream umwandeln? Allgemeine Java-Themen 4
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
berserkerdq2 Wie synchronisiere ich eine for-Schleife Allgemeine Java-Themen 12
N Warum wird die For Schleife nicht betreten Allgemeine Java-Themen 4
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
A For-Schleife Allgemeine Java-Themen 5
J Algorithmen Analyse einer Schleife Allgemeine Java-Themen 6
1 Klassen Variabel aus Schleife übergeben Allgemeine Java-Themen 8
D "Automatisierte", variable verschachtele for-Schleife Allgemeine Java-Themen 9
K For-Schleife <> oder != Operator verwenden? Allgemeine Java-Themen 2
J Einen Thread in einer Schleife Allgemeine Java-Themen 2
D While-Schleife - if Zweig unterbrechen Allgemeine Java-Themen 1
F Zweifache For-Schleife Allgemeine Java-Themen 6
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
T String aus While Schleife für ganze Klasse sichtbar machen Allgemeine Java-Themen 5
M While-Schleife schneller, solange die Abbruchbedingung nicht vom Schleifeninneren abhängt Allgemeine Java-Themen 3
S Variablen String[] Array per schleife in int[] einlesen Allgemeine Java-Themen 8
D Methoden Buttons erscheinen doppelt nach Wiederholung in Schleife Allgemeine Java-Themen 1
RalleYTN Problem bei Schleife die durch einen 2D raum iterieren soll Allgemeine Java-Themen 1
T for - Schleife Allgemeine Java-Themen 1
J While Schleife ausführen bis Zahl = X Allgemeine Java-Themen 19
R Komplizierte Schleife Allgemeine Java-Themen 1
Q For-Schleife in String-Value Allgemeine Java-Themen 3
F Abstrakte Klasse in "For each" Schleife Allgemeine Java-Themen 1
F for-Schleife auf Kommandoebene ausgeben Allgemeine Java-Themen 9
P Input/Output java.util.Scanner in einer Schleife und Exception-Behandlung: Einlesen einer Zahl Allgemeine Java-Themen 4
P Erweiterte For Schleife Allgemeine Java-Themen 7
D Arraylist/For Schleife/Scanner Allgemeine Java-Themen 30
Y automatisierte for Schleife Allgemeine Java-Themen 13
B For schleife und weiter? Allgemeine Java-Themen 8
D Probleme bei for-Schleife Allgemeine Java-Themen 4
L einfache Verzinsung mit for-Schleife & Ausschluss von Werten beim Einlesen Allgemeine Java-Themen 5
N Frage zur while-Schleife Allgemeine Java-Themen 18
M for Schleife mit Swing Button abbrechen Allgemeine Java-Themen 7
M PdfPTable per for-Schleife befüllen Allgemeine Java-Themen 3
F for-Schleife mit : Allgemeine Java-Themen 5
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
W Problem mit Index in einer for-Schleife Allgemeine Java-Themen 8
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
P Variablen Auf durch for-Schleife generierte JComboBox zugreifen Allgemeine Java-Themen 3
G while Schleife ausführen solange eine Taste gedrückt ist Allgemeine Java-Themen 14
F Foreach und for - Schleife Allgemeine Java-Themen 10
W Berechnung Durchschnitt mit Schleife Allgemeine Java-Themen 9
S for-Schleife, while-Schleife Problem Allgemeine Java-Themen 6
H Netbeans Warning bei Thread.sleep in Schleife Allgemeine Java-Themen 4
A java.lang.NullPointerException bei Schleife Allgemeine Java-Themen 3
S Erste Schritte Exception beendet Schleife nicht - Methode macht trotz throw weiter? Allgemeine Java-Themen 9
R while schleife auf 3 durchgänge beschränken Allgemeine Java-Themen 6
V anstatt thread.join() einfach while schleife? Allgemeine Java-Themen 8
x22 for-Schleife Allgemeine Java-Themen 76
S Text in for Schleife in Label einfügen Allgemeine Java-Themen 4
J Schleife mit : Allgemeine Java-Themen 18
S Klassen in einer Schleife durchlaufen Allgemeine Java-Themen 11
E Schleife wird nicht ausgeführt!!! Allgemeine Java-Themen 8
C Schleife mit leerem Anweisungsblock wird trotz erfüllter Bedingung nicht verlassen Allgemeine Java-Themen 9
S Do-While Schleife bricht nicht ab Allgemeine Java-Themen 3
S Erste Schritte if-Anweisung in for- oder while-schleife umwandeln Allgemeine Java-Themen 3
K CheckBox schleife Allgemeine Java-Themen 2
D Methoden Thread Schleife Status Allgemeine Java-Themen 7
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
R In einer for Schleife bei einem Substring anfangen, wo man davor aufgehört hat Allgemeine Java-Themen 6
T Rekursion mit While Schleife kombinieren? Allgemeine Java-Themen 4
D Sterne Muster mit einer Schleife Allgemeine Java-Themen 5
Dragonfire Code Konvention for-Schleife / return Allgemeine Java-Themen 15
hdi Detail-Frage zur for-Schleife Allgemeine Java-Themen 9
J Thread pausieren, lange while-Schleife Allgemeine Java-Themen 8
Q Variable aus Schleife/Switch benutzen Allgemeine Java-Themen 7
J Erweiterte For-Schleife mit Vector Allgemeine Java-Themen 5
C Geschachtelte For-Schleife: Äußere Schleife wird nur einmal durchlaufen!? Allgemeine Java-Themen 3
W return Collection mit schleife durchsuchen Allgemeine Java-Themen 10
H Threads.... ich will aus der While-Schleife raus Allgemeine Java-Themen 6
calzone Warum wird nicht aus der Schleife gesprungen ? Allgemeine Java-Themen 2
lacyuu Schleife hängt sich auf, wieso?? Allgemeine Java-Themen 2
ModellbahnerTT Problem: Schleife über Textdatei Allgemeine Java-Themen 5
S Wie gross ist die Laufzeit für diese Schleife?? Allgemeine Java-Themen 8
J Schachbrett mit for- oder while-Schleife Allgemeine Java-Themen 22
I For- Schleife falsch? Allgemeine Java-Themen 8
T Schleife kurzzeitig anhalten Allgemeine Java-Themen 5
V Problem in While-Schleife Allgemeine Java-Themen 3
Escorter Switch in der Schleife! Allgemeine Java-Themen 4
C Auswertung der for each schleife? Allgemeine Java-Themen 2
GilbertGrape foreach Schleife Allgemeine Java-Themen 12
J FOR-Schleife-Problem Allgemeine Java-Themen 10
G Schleife durch Button beenden Allgemeine Java-Themen 6
G Anonymen Buttons in for schleife ActionListener hinzufügen Allgemeine Java-Themen 5
T getParameter in while schleife Allgemeine Java-Themen 3
O while - Schleife unterbrechen mit break; Allgemeine Java-Themen 5
R array.length in For-Schleife verwenden? Allgemeine Java-Themen 22
T Schleife im Konstruktor? Allgemeine Java-Themen 9
S Schleife mit Durchlaufrate Allgemeine Java-Themen 5
R Per for schleife string propertys in einer datei speichern Allgemeine Java-Themen 15
H In Testklasse Objekte erzeugen und in einer Schleife ausgebe Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben