Boolean in Java richtig verwenden?

2 Antworten

Der einzige Fehler, der mir auffällt, ist dieses "if (bombeliegt[koordx][koordy] = false) {", was schon gesagt wurde. Da musst du halt entweder das = durch == austauschen oder du nimmst den Vergleich raus, weil in dem Array ja sowieso schon booleans gespeichert sind.

Wenn du ein Boolean-Array erzeugst, werden die Felder automatisch alle mit false initialisiert, also brauchst du da nicht großartig was machen.

Was ich dir aber eigentlich empfehlen will: So, wie es aussieht, willst du einen Minesweeper-Klon bauen. Die jeweiligen Felder können also mehrere Zustände haben (leer, leer aber angeklickt, versteckte Bombe, Bombe angeklickt, mit einer Flagge markiert, Anzahl der umliegenden Bomben etc.). Es wäre aber schlecht, wenn du für jede der Eigenschaften ein Array baust, also solltest du eine Klasse bauen, die die ganzen Eigenschaften für jede Zelle speichern kann. Davon kannst du dann Objekte erzeugen, die du in dein Array packen kannst.

Bryan23456789 
Fragesteller
 18.05.2022, 13:37

Ja richtig erkannt das soll ein Minesweeper-Klon werden, ich habs leider noch nicht so mit der Logik und wie ich das am besten umsetze und zu dem wie du es meinst kann ich mir leider nicht vorstellen wie ich das dann genau umsetzen soll -

0
Bryan23456789 
Fragesteller
 18.05.2022, 13:38

Das mit dem True setzen funktioniert jetzt auch erstmal habs hinbekommen

0
Von Experte Gehilfling bestätigt
if (bombeliegt[koordx][koordy] = false)

ist kein Vergleich. Dazu wären "==" nötig

das kannst du einfacher verkürzen:

if (!bombeliegt[koordx][koordy])

ist das gleiche wie

if (bombeliegt[koordx][koordy] == false)
Woher ich das weiß:eigene Erfahrung – Ich habe selber lange im PC gearbeitet
TechPech1984  18.05.2022, 11:24

ergänzung :

das ! vor dem boolean , negiert diesen , also aus wahr wird falsch , aus falsch wird wahr -

2
Bryan23456789 
Fragesteller
 18.05.2022, 11:38

Okay es klappt trotzdem nichts. Der erste Fehler kommt bei mir schon beim erstellen des boolean array und ich weiß echt nicht warum

Was ist der Standard Zustand eines boolean? Gibts da einen?

0
ZaoDaDong  18.05.2022, 11:38
@Bryan23456789

Boolean oder boolean? Also Gewrapped oder primitiv? Die Wrapperklasse ist standardmäßig null, der primitive boolean muss immer initialisiert werden.

0
Bryan23456789 
Fragesteller
 18.05.2022, 11:44
@ZaoDaDong

boolean bombeliegt[][] = new boolean[manager.boardGui.getLaenge()][manager.boardGui.getBreite()];

So erstelle ich es - wenn da nichts falsch ist müsste ich was in meiner boardgui klasse falsch haben würde ich vermuten

0
Bryan23456789 
Fragesteller
 18.05.2022, 11:51
@Bryan23456789

Oder muss ich erst den ganzen boolean array auf false setzen damit dieser nicht überall null ist ?

0
ZaoDaDong  18.05.2022, 12:27
@Bryan23456789

das Array ist ja dann erstmal leer. Du hast nur die Dimensionen definiert, nicht den Inhalt.

Und lege das boolean Array am besten nicht mit dem primitiven "boolean" an, sondern mit der Klasse "Boolean", damit auch ein Null-Wert möglich ist.

0
Bryan23456789 
Fragesteller
 18.05.2022, 12:30
@ZaoDaDong

wie genau mach ich das :´) ich hab noch gar keine Ahnung von Wrapper Klassen

0
ZaoDaDong  18.05.2022, 12:30
@Bryan23456789
Boolean bombeliegt[][] = new Boolean[manager.boardGui.getLaenge()][d2];

"new boolean" ist gar nicht möglich.

Du brauchst übrigens auch noch eine 2. Dimension d2, du definierst ja nur die eine bisher.

0
ZaoDaDong  18.05.2022, 12:34
@ZaoDaDong

Alternativ machst du ein eindimensionales Array:

Boolean bombeliegt[] = new Boolean[manager.boardGui.getLaenge()];
0
Bryan23456789 
Fragesteller
 18.05.2022, 12:44
@ZaoDaDong

Also wenn ich es mit der Wrapper Klasse mache läufts nicht durch, so wie ich es gemacht habe (mit der Hilfe das mein vergleich falsch ist ) läuft es wenigstens n paar mal durch dann kommt ne array out of bounds exception

0
ZaoDaDong  18.05.2022, 12:48
@Bryan23456789

habs mal selbst probiert, mit dem primitiven boolean wird dann automatisch das array mit false gefüllt.
Mit der Wrapperklasse müsstest du selbst erstmal jeden Wert instanziieren.

Du kannst also auch boolean nutzen, wenn du das willst.

0
Bryan23456789 
Fragesteller
 18.05.2022, 12:51
@ZaoDaDong

Bei mir sieht es jetzt gerade so aus:

public void generiereBomben() {

//Arrays.fill(bombeliegt, false);

int bomben = ((manager.boardGui.getBreite() * manager.boardGui.getLaenge()) /8);

int counter = 0;

while(counter < bomben) {

//for(int counter = 0; counter < bomben; counter++ ) {

int koordx = random.nextInt(manager.boardGui.getLaenge()+1);

int koordy = random.nextInt(manager.boardGui.getBreite()+1);

if (bombeliegt[koordx][koordy] == false) {

bombeliegt[koordx][koordy] = true;

System.out.println("durchgang bombelegen" + koordx + koordy);

counter++;

}else {

//counter = counter - 1;

System.out.println("bombenichtlegen");

Findest du rein zufällig warum bei mir eine Arrayoutofbounds exception kommt ?

0
ZaoDaDong  18.05.2022, 13:24
@Bryan23456789

Ja. Der Index eines Arrays beginnt bei 0.

Das heißt, wenn dein Array

array[][] = new boolean[10][10] ist, dann gibt es beim Zugriff kein Element bei array[10][10].

das erste Element liegt bei array[0][0] und das letzte bei array[9][9]

0
Bryan23456789 
Fragesteller
 18.05.2022, 13:40
@ZaoDaDong

Ja habe es selbst realisiert das mein feld ja nur 9x9 Felder groß ist x)

0
ZaoDaDong  18.05.2022, 13:47
@Bryan23456789

Es ist schon 10x10 Felder groß. von 0-9, das sind 10. Also wäre es, wenn mein Beispiel zutriff :D

0
Bryan23456789 
Fragesteller
 18.05.2022, 13:50
@ZaoDaDong

Naja ich get die zahlen ja aus ner anderen klasse, da hab ich angegeben das mein gridlayout 9x9 felder groß ist also brauch ich nur ein array von 0 - 8, jetzt funktioniert jedenfalls alles

0