Array Muster mit true und false

John Cena

Mitglied
Hallo Leute,

nach langer Suche habe ich leider kein ähnliches Thema gefunden und wollte mein Problem schildern:
Mein Aufgabe ist es ein rechteckiges, zweidimensionales Array abwechselnd mit true und false zu füllen

true false true false
false true false true
true false true false
false true false true

Mein Code:

Java:
public class Schachbrett
{
    public static void main (String [] args)
    {
        boolean [] [] b1 = new boolean [5] [10];
        schachbrett(b1);
    }
   
    static void schachbrett (boolean [] [] feld)
    {
        boolean hilfe = true;
       
        for (int i = 0; i < feld.length; i++)
        {
            for (int j = 0; j < feld[i].length; j++)
            {
                feld [i] [j] = hilfe;
                System.out.print(feld [i] [j] + " ");
       
                if (hilfe)
                    hilfe = false;
                else
                    hilfe = true;
            }
           
            System.out.println();
        }
    }
}


Da kommt leider sowas raus:

true false true false
true false true false
true false true false
true false true false


Java:
public class Schachbrett
{
    public static void main (String [] args)
    {
        boolean [] [] b1 = new boolean [5] [10];
        schachbrett(b1);
    }
  
    static void schachbrett (boolean [] [] feld)
    {
        boolean hilfe = true;
      
        for (int i = 0; i < feld.length; i++)
        {
            for (int j = 0; j < feld[i].length; j++)
            {
                feld [i] [j] = hilfe;
                System.out.print(feld [i] [j] + " ");
      
                if (hilfe)
                    hilfe = false;
                else
                    hilfe = true;
            }

                if (hilfe)
                    hilfe = false;
                else
                    hilfe = true;
          
            System.out.println();
        }
    }
}


Wenn ich die If- Bedinung nochmal in die äußere for-Schleife packe, kommt das richtige raus. Er muss ja eigentlich seinen alten Wert behalten, wenn er in die nächste Zeile springt, aber wie genau ich das besser umsetzen kann, weiß ich leider nicht. Ich hoffe ich könnt mir helfen. Vielen Dank. Gruß J
 
Also das Thema Schachbrett hatten wir doch hier schon und den Thread solltest Du auch finden können.

Und die Problematik ist noch größer: Mach dein Spielfeld statt 4 doch mal 5 Felder breit. Schon klappt es mit dem Wechsel nicht mehr.

Also ist das erste Feld in jeder Reihe nicht abhängig vom letzten Zeichen davor. Aber evtl. siehst Du ja noch eine andere Abhängigkeit, die Du nutzen könntest.
 
Hallo,

also ich hab weiter dran gearbeitet, der klappt auch mit verschiedenen Größen soweit ich getestet habe, aber dieser code ist glaub ich auch "unschön":

Java:
static void schachbrett (boolean [] [] feld)
    {
        for (int i = 0; i < feld.length; i++)
        {
            for (int j = 0; j < feld[i].length; j++)
            {
                if (i % 2 == 0)
                    {
                    if (j % 2 == 0)
                        feld [i] [j] = true;
                    else
                        feld [i] [j] = false;
                    }
                else if (i % 2 == 1)
                {
                    if (j % 2 == 1)
                        feld [i] [j] = true;
                    else
                        feld [i] [j] = false;
                }
                System.out.print(feld [i] [j] + " ");
            }
            System.out.println();
        }
          
    }
 
Das ist doch schon eine super Lösung! Das ist sehr gut und viel mehr, als ich erwartet hätte.

Jetzt kannst Du das alles noch etwas optimieren:
Wenn Du etwas wie folgt hast:
Code:
if (Bedingung) {
  something = true;
} else {
  something = false;
}
dann lässt sich das kürzer schreiben als:
Code:
something = Bedingung;

Das wäre die erste Optimierung.

Die zweite Optimierung, die mir durch den Kopf geht, ist:
Du hast mehrere ifs, aber raus kommt eigentlich immer true oder false (was Du in einer Variable speicherst). Das lässt sich auch zu einer großen Bedingung schreiben.

Damit das aber einfacher zu sehen ist, schreibst Du die unterschiedlichen Bedingungen einfach als a und b. a wäre dann also i%2==0 und b dann j%2 == 0.

Dann kannst Du eine Tabelle aufstellen:
a b Ergebnis
0 0 ?
0 1 ?
1 0 ?
1 1 ?
Und wenn Du dann die Ergebnisspalte gefüllt hast, dann siehst Du evtl. eine logische Operation.

Und dann hast Du nur noch eine einzige Zuweisung zu eben genau dieser logischen Verknüpfung.

Eine letzte Sache, die noch auffällt: Die Namen sollten evtl. besser gewählt werden. i und j sagen ja nichts aus. Da wäre dann sowas die zeile und spalte günstiger.

Aber wie gesagt: Die Lösung ist schon super, Lösungsansatz ist richtig und auch richtig umgesetzt. Das sind jetzt nur noch Optimierungen einer richtigen Lösung.
 

Neue Themen


Zurück
Oben