Anomalie in meinem Vergleich von Listen :)

Hi,

ich habe 2 Map-Files: Folgender Aufbau!

Alte:

0x0000        0xFF        Test1        
0x0001        0xF2        Test2        
0x0002        0xFF        Test3
0x0003        0xFF        Test4
0x0004        0xF1        Test5

Neue:

0x0000        0xF0        Test1        
0x0001        0xF1        Test2        
0x0002        0xF1        Test3
0x0003        0xF1        Test4
0x0004        0xFF        Test5
0x0005        0xF1        Test6

Ich vergleiche hier zuerst ob aus der neuen und alten z.B. Test3 in beiden vorhanden ist! Und danach überprüfe ich ob es eine Wertveränderung (2. Spalte z.B. bei Test3 von 0xFF -> 0xF1) in der neuen Map-File gibt.

Trotz Veränderung gibt die Bedingung mir in der Console aber falsche Werte an. Warum?

  Java Code:
 [LEFT]

[ol]
[li][FONT=Courier New]for (int x = 2; x < getArrayListSize(); x += 3) { [/li][li] if (x <= newArrayList.size()) {[/li][li] System.out.println("ALL: " + newArrayList.get(x));[/li][li] // Check if description of the new map file is equal to the old map-file[/li][li] if (oldArrayList.contains(newArrayList.get(x))) {[/li][li] System.out.println("Old Value: " + oldArrayList.get(x-1) + " New Value: " +newArrayList.get(x-1) + " Boolean: " + oldArrayList.contains(newArrayList.get(x-1)));[/li][li] // Check if the value has been changed in the new map-file[/li][li] if (!oldArrayList.contains(newArrayList.get(x-1))) {[/li][li] System.out.println("Wert unterschiedlich: " + newArrayList.get(x - 1));[/li][li] ((DefaultTableModel)jTable1.getModel()).addRow(new Object[]{newArrayList.get(x-2), newArrayList.get(x-1), newArrayList.get(x)});[/li][li] } [/li][li] } [/li][li] }[/li][li] }[/li][li] System.out.println(“OLD ARRAY LIST:”);[/li][li] for (String str : oldArrayList) {[/li][li] if (oldArrayList.size() % 3 == 0) {[/li][li] System.out.println(str);[/li][li] }[/li][li] }[/li][li] System.out.println(“NEW ARRAY LIST:”);[/li][li] for (String str : newArrayList) {[/li][li] if (newArrayList.size() % 3 == 0) {[/li][li] System.out.println(str);[/li][li] }[/li][li] }[/li][/ol]
[/FONT]
[/LEFT]

Und das ist meine Console:

ALL: Test1
Old Value: 0xFF New Value: 0xF0 Boolean: false
Wert unterschiedlich: 0xF0
ALL: Test2
Old Value: 0xF2 New Value: 0xF1 Boolean: true       // sind doch unterschiedlich, sollte hier ein false schmeissen!
ALL: Test3
Old Value: 0xFF New Value: 0xF1 Boolean: true       // hier auch und folgend
ALL: Test4
Old Value: 0xFF New Value: 0xF1 Boolean: true
ALL: Test5
Old Value: 0xF1 New Value: 0xFF Boolean: true
ALL: Test6
OLD ARRAY LIST:
0x0000
0xFF
Test1
0x0001
0xF2
Test2
0x0002
0xFF
Test3
0x0003
0xFF
Test4
0x0004
0xF1
Test5
NEW ARRAY LIST:
0x0000
0xF0
Test1
0x0001
0xF1
Test2
0x0002
0xF1
Test3
0x0003
0xF1
Test4
0x0004
0xFF
Test5
0x0005
0xF1
Test6

Wenn ich Jetzt jedoch in der alten Map-File auf z.B.

 0x0004        0xFF        Test5 

setze. Dann gibt er mir alles richtig aus! HILFE?! :eek::twisted:

ALL: Test1
Old Value: 0xFF New Value: 0xF0 Boolean: false    // alle ungleichen = false! Also korrekt! 
Wert unterschiedlich: 0xF0
ALL: Test2
Old Value: 0xF2 New Value: 0xF1 Boolean: false
Wert unterschiedlich: 0xF1
ALL: Test3
Old Value: 0xFF New Value: 0xF1 Boolean: false
Wert unterschiedlich: 0xF1
ALL: Test4
Old Value: 0xFF New Value: 0xF1 Boolean: false
Wert unterschiedlich: 0xF1
ALL: Test5
Old Value: 0xFF New Value: 0xFF Boolean: true     // Hier gleich daher true
ALL: Test6
OLD ARRAY LIST:
0x0000
0xFF
Test1
0x0001
0xF2
Test2
0x0002
0xFF
Test3
0x0003
0xFF
Test4
0x0004
0xFF
Test5
NEW ARRAY LIST:
0x0000
0xF0
Test1
0x0001
0xF1
Test2
0x0002
0xF1
Test3
0x0003
0xF1
Test4
0x0004
0xFF
Test5
0x0005
0xF1
Test6

Vielen Dank! :o)

Du willst zwei Werte vergleichen, aber rufst “contains” auf. “Contains” sagt dir, ob eine Liste ein bestimmtes Element beinhaltet - ganz egal ob es hinten oder vorne in der Liste ist. Du musst die beiden Werte die du vergleichen willst schon aus der Liste lesen, und mit “equals” vergleichen.

Ausserdem würde ich dir empfehlen, die einzelnen Zeilen im File als Objekt abzubilden, wäre gleich viel übersichtlicher als eine mehr oder weniger geordnete Liste.

SONY! Der geht!

Danke!!

oldArrayList.get(x-1).equals(newArrayList.get(x-1))

:slight_smile: