Wert in ArrayList ändert sich ohne wissentliches zutun

Status
Nicht offen für weitere Antworten.

Nikolas

Aktives Mitglied
Ich baue gerade an meinem Minesweeper und habe ein 2Dimensionales Array dafür gebaut.
Code:
static List<List<MineField>> grid = new ArrayList<List<MineField>>();
MineField ist eine Klasse aus ein paar integern und booleans.

Dieses grid habe ich als Klasse gebaut und mir dabei etwa solche Funktionen gegeben:
Code:
	public MineField get(int x, int y) {
		
		// Wenn das zu holende Element nicht da ist:
		try {return grid.get(x).get(y);}
		catch (IndexOutOfBoundsException e ) {
			System.out.println("IndexOutOfBounds bei grid.get: x="+x+ "y="+y);
			return null;
		}
	}

Im eigentlich Spiel initalisiere ich das array mit
Code:
	// Die Minen werden gelegt:
		for (int i=0; i<countX; i++) {
			for (int j=0;j<countY; j++) {
				
				grid.get(i,j).flagged = false;
				grid.get(i,j).opened=false;
				if (r.nextDouble() < mineProb) {
					grid.get(i,j).mined=true; // Bombe
					bombCount++;}
				else 
					grid.get(i,j).mined=false; // keine Bombe
			} //  for y
		} // for x
Diese Werte werden auch angenommen und korrekt gelesen, so weit kein Problem. Wenn ich jetzt aber auf eine Bombe klicke, führe ich diesen Code aus:
Code:
	// eine Mine wurde an der übergebenen Position aufgedeckt
	public static void handleDefeat(int x, int y) {
		
		System.out.println("defeat");
		
		f.setTitle("verloren");
		
		for (int i=0; i<countX; i++) {
			for (int j=0;j<countY; j++) {
				
			// Bei nicht verminten Feldern werden die Nachbarbomben angezeigt		
			if (grid.get(x,y).mined) {
				if (grid.get(x,y).flagged)
					Buttons[i][j].setText("(B)"); // markierte Bombe
				else
					Buttons[i][j].setText("B"); // nicht markierte Bombe
			} else { // Feld ist nicht vermint
				int cnt = grid.get(x,y).mineCount;
				
				if (grid.get(x,y).flagged) {
					Buttons[i][j].setText("F"); // Falsch markiert
					continue;
				}
				
				if (cnt==0)
					Buttons[i][j].setVisible(false);
				else
					Buttons[i][j].setText(""+cnt);
			}				
			} // schleife y
		} // schleife x
		
	// Die falsche Entscheidung wird angezeigt:	
	Buttons[x][y].setText("X");
		} // handledefeat
Das Problem liegt jetzt darin, dass sämtlich Felder mit einem B markiert sind. (ausser dem an Stelle x,y). An keiner Stelle ausser bei der initialisierung habe ich ein grid.get(x,y).mined=true stehen, so dass mich das verhalten etwas wundert.
Möglicherweise mache ich sonst etwas falsch, ich programmiere erst seit ein paar Wochen mit Java, davor hab ich mit Pascal gearbeitet und heute habe ich die Lists zum ersten Mal benutzt.
 
S

SlaterB

Gast
tja, nix offensichtliches in deinem Code, aber du beschreibst auch nicht mal ein konkretes Problem,

allgemein bleibt zu sagen:
mache deinen Code 'kontrollierter' und baue mehr Ausgaben ein,
dann kannst du jedes einzelne bit verfolgen und nichts kann dich mehr überraschen,

du hast Problem mit mined?
mache mined private und verwende

Code:
public boolean getMined() {
  System.out.println("ich bin Objekt "+hashCode()+", ich returne minded = "+this.minded);
  return this.minded;
}

public void setMined(boolean mined); {
  System.out.println("ich bin Objekt "+hashCode()+", ich war minded = "+this.minded+", bin nun mined: "+minded);
  this.mined = mined;
}

so kannst du für jedes Objekt von Anfang an bis zum Ende aller Tage den Zustand von mined loggen,
falls die Ausgaben zu viele werden: fange eh erstmal mit einem 1x1, 1x2 oder 2x2-Feld an..
 
G

Guest

Gast
Nikolas hat gesagt.:
Code:
if (grid.get(x,y).flagged) 
               Buttons[i][j].setText("(B)"); // markierte Bombe 
            else 
               Buttons[i][j].setText("B"); // nicht markierte Bombe
Ist das richtig, dass beides Mal "B" gesetzt wird?

Fred
 

Nikolas

Aktives Mitglied
@Slater: Ich beschreibe doch recht genau mein Problem... Im obigen Code ist zu sehen, wie .mined gesetzt ist und unten sage ich, dass diese Variable einen anderen Wert hat. Das mit den Funktionen werde ich mal ausprobieren.

@Gast: Wer lesen kann, ist klar im Vorteil.

@Fatal Error: Oh tschuldigung, den Ausdruck bin ich noch von Pascal gewohnt. Vielleicht spürt Java diesen Ausdrucksfehler und macht deswegen komische Sachen :)
 

André Uhres

Top Contributor
In "handleDefeat" vergleichst du mit
Code:
if (grid.get(x,y).mined) {...}
immer dasselbe Feld (x,y sind ja die Parameter der Methode).
Wenn dieses Feld vermint ist, wird natürlich überall B gesetzt!
 

Nikolas

Aktives Mitglied
oh. Da hast du recht. Ich hatte in einer ersten Version statt der Liste ein statisches Array und die aufrufe habe ich dann per find&replace ersetzt. Anscheinend habe ich da mit dem falschen ersetzt und keine Fehlermeldung bekommen, weil auch die anderen parameter vorkommen.

Vielen Dank.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J ArrayList aus Point-Objekten nach dem x-Wert ordnen Allgemeine Java-Themen 2
J Wie kann man herausfinden, wo der Wert herkommt ? Allgemeine Java-Themen 13
JAnruVA Datentypen Berechneten String-Wert in Double umwandeln um weiter zu rechnen Allgemeine Java-Themen 7
T Verschachtelte For-Schleife gibt falschen Wert zurück, Abbruchbedingung evtl. falsch? Allgemeine Java-Themen 9
L 2 Dimensionale ListArray Abfrage nach einem Wert suchen Allgemeine Java-Themen 5
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
I Wie kann ich den Wert aus einer If abfrage ausgeben Allgemeine Java-Themen 23
S Wert zuweisung Allgemeine Java-Themen 1
Alex_99 Rechner: Wert zwischenspeichern und bei Bedarf mit Ihm weiterrechnen? Allgemeine Java-Themen 6
J Wo kommt der Wert der Variable her ? Allgemeine Java-Themen 6
Tiago1234 CellReference cr = new CellReference("") gibt den falschen Wert zurück Allgemeine Java-Themen 49
N Value Wert aus HTML-Button mittels thymeleaf spring an java übergeben Allgemeine Java-Themen 2
L String zu repräsentativen Wert Allgemeine Java-Themen 0
S Drools: Zählen wie oft ein Wert vorkommt Allgemeine Java-Themen 1
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
T Wert an laufenden Java-Prozess übergeben Allgemeine Java-Themen 10
A Variablen Funktion übergibt den Wert nicht Allgemeine Java-Themen 13
P JSpinner gibt leeren Wert zurück Allgemeine Java-Themen 5
KeexZDeveoper Nächstgelegenden Wert ermitteln Allgemeine Java-Themen 5
C Variablen Variablen mit unendlichem Wert Allgemeine Java-Themen 22
G Iteratoren - Wie kann man mithilfe von Iteratoren nur jeden zweiten Wert eines TreeSets ausgeben? Allgemeine Java-Themen 4
A Mit dem letzten bis zum ersten Wert aus Array rechnen Allgemeine Java-Themen 15
T Array - Wert am nächsten zur vollen Sekunde Allgemeine Java-Themen 20
F Wert in Variable schreiben, wenn diese gerade genutzt wird Allgemeine Java-Themen 10
G Methoden BMI -Wert Aufgabe(Methoden) Allgemeine Java-Themen 4
F Wert ändert sich nicht Allgemeine Java-Themen 12
E JavaFX String-Wert geht "verloren" - ratlos Allgemeine Java-Themen 2
A In Excel-Datei schreiben, Formeln der Mappe anwenden, Wert lesen Allgemeine Java-Themen 3
R Int Wert im Dialogfeld ändern Allgemeine Java-Themen 4
B [Android] EditText-Object ist null - Nimmt nicht den Wert des enthaltenen Textfeldes ein Allgemeine Java-Themen 2
O log4j, Problem bei Ausgabe null-Wert Allgemeine Java-Themen 0
H Bestimmten Wert aus String parsen Allgemeine Java-Themen 7
M HashMaps: Wert erweitern Allgemeine Java-Themen 3
C Object.equals() liefert falschen Wert? Allgemeine Java-Themen 14
M Parallele Programmierung: volatile Variable nimmt ungewöhnlichen Wert an Allgemeine Java-Themen 3
T Datentypen ArrayUtils.indexOf( ... ) liefert -1 obwohl Wert scheinbar enthalten ist Allgemeine Java-Themen 15
H Speziellen Wert aus String filtern Allgemeine Java-Themen 4
M JExcel Wert aus Zelle übergeben/ausgeben Allgemeine Java-Themen 2
iB0T Variable Wert ausrauchen Allgemeine Java-Themen 3
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
G Z Wert - 3 Dimensionaler Punkt Allgemeine Java-Themen 13
S JPA und Entity-Klassen: Wert ungültig Allgemeine Java-Themen 6
C .Ini-Datei Wert Änderungen werden nicht angenommen Allgemeine Java-Themen 3
J String mit "," in Double Wert konvertieren Allgemeine Java-Themen 7
A nur einen Wert aus einer .conf lesen und erneuern Allgemeine Java-Themen 3
I getResponseCode(); returnt einen falschen Wert? Allgemeine Java-Themen 7
N Applet Apache Poi Wert einer Formel ausgeben Allgemeine Java-Themen 5
G Input/Output Manuelle Änderung von Wert in Swing Komponente bemerken! Allgemeine Java-Themen 2
S Newton-Verfahren liefert nur 1 Wert Allgemeine Java-Themen 3
E Wert von enum zur Laufzeit festlegen. Allgemeine Java-Themen 5
E Wert in andere Klasse übernehmen Allgemeine Java-Themen 4
X this.val$WERT Was ist den das? Allgemeine Java-Themen 2
K Scanner - große Textfile, nur 0 ab betim. Wert Allgemeine Java-Themen 4
S Daten in Array als INT-Wert einlesen - jetzt als csv Datei Allgemeine Java-Themen 5
T OLE-Automation mit Excel (Wert übergabe) Allgemeine Java-Themen 1
Benji0815 Wert in GUI aktualisieren, Beobachter Allgemeine Java-Themen 9
O Hash Wert von Passwörter erstellen (SHA) Allgemeine Java-Themen 9
G Double Wert über OutputStream verschicken Allgemeine Java-Themen 2
S Methode übergibt immer den gleichen Wert Allgemeine Java-Themen 21
J Was ist schneller? Neue Variable oder neuer Wert speziell int Allgemeine Java-Themen 3
M Bit Wert umdrehen Allgemeine Java-Themen 5
B Wert mit Adresse auslesen Allgemeine Java-Themen 11
S Array: Anzahl Elemente mit best. Wert zählen Allgemeine Java-Themen 4
M Ein Array-Wert soll sich verändern, aber 2 tun es? Allgemeine Java-Themen 7
S Prüfen auf Hex-Wert fester Länge! Allgemeine Java-Themen 5
G transientes Objekt mit Wert initialisieren? Allgemeine Java-Themen 7
J in einer static Variable Wert ändern Allgemeine Java-Themen 6
reibi double-Wert auf 2 Stellen nach dem Komma abschneiden Allgemeine Java-Themen 6
S CRC wert berechnen ergibt 0 ? Allgemeine Java-Themen 9
MQue Float- Wert formatieren Allgemeine Java-Themen 8
A Private-Wert eines Objekts auslesen Allgemeine Java-Themen 9
R Wert von einer Klasse in eine andere bekommen Allgemeine Java-Themen 6
J Integer Array Wert vorhanden? Allgemeine Java-Themen 6
O System.nanoTime() einheitlichen Wert auf mehreren Rechnern? Allgemeine Java-Themen 9
H JTable Wert verändern Allgemeine Java-Themen 3
S den zweit niedrigsten wert in einem array berechnen Allgemeine Java-Themen 2
J variablen wert ändernung mit einer art actionlistener? Allgemeine Java-Themen 4
J Vector - Wert ersetzen Allgemeine Java-Themen 14
H Zugriff auf Wert einer Umgebungsvariablen Allgemeine Java-Themen 2
H JSF - Wert an ein managed bean übergeben Allgemeine Java-Themen 2
H boolean wert ändern Allgemeine Java-Themen 2
R Wert in Hashtable ändern (Key ändern, Value bleibt) Allgemeine Java-Themen 3
G Wandeln von Char Wert in Zeichen? Allgemeine Java-Themen 2
B Java Klasse muß in Terminal einen Wert zurückgeben. Allgemeine Java-Themen 3
R ascii-wert zuweisung Allgemeine Java-Themen 4
B Wert zuweisen bei deklaration? Allgemeine Java-Themen 9
C ImageIO die read-Methode liefert mir ein null- Wert zurück Allgemeine Java-Themen 10
A Float-Wert auf 2 Stellen nach den Komma runden ? Allgemeine Java-Themen 2
B Double-Wert aus einem HexString erstellen. Allgemeine Java-Themen 11
B Wie bekomme ich den Wert aus der For-Schleife? Allgemeine Java-Themen 5
M ArrayList oder LinkedList Allgemeine Java-Themen 10
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
B Type mismatch: cannot convert from Graph.Edge to ArrayList<Graph.Edge> Allgemeine Java-Themen 21
R ArrayList Allgemeine Java-Themen 4
G jToggleButton in Array/ArrayList Allgemeine Java-Themen 12
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
L ArrayList sortieren Allgemeine Java-Themen 2
C ArrayList Problem Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben