verbesserungsvorschläge?

student2018

Mitglied
hey ne frage schachbrett array Aufgabe gehabt.und meine lösung wäre
Java:
package mix;

public class mix {
   
 public static void main(String[] args) {
    
  boolean schach[][] = new boolean[8][8];
  boolean schwarz = false;
  boolean weiss = true;
  boolean wechsel;
 
  for (int i = 0; i < schach.length; i++) {
     
   for (int j = 0; j < schach.length; j++) {
      
    if (weiss) {
     schach[i][j] = true;
     System.out.print(schach[i][j] + "    ");
    } else {
     schach[i][j] = false;
     System.out.print(schach[i][j] + "   ");
    }
   
    wechsel = schwarz;
    schwarz = weiss;
    weiss = wechsel;
   }
  
   schwarz = !schwarz;
   weiss = !weiss;
   System.out.println();
  }
 
 }
 
}

wie kann man das verbessern.und was müsste ich verändern um nullen und einsen rauszubekommen statt true und false
 
Zuletzt bearbeitet von einem Moderator:

Robat

Top Contributor
Die sind nicht "weggegangen" .. [i] wird, wenn man es nicht maskiert, als kursive Schrift erkannt.
Daher Code immer in Code-Tags (siehe meine Signatur oder im Editor den Einfügen-Button (4. von rechts.)
 

student2018

Mitglied
Java:
mycode[/
package mix;

public class mix {

    public static void main(String[] args) {

boolean schach[][]=new boolean[8][8];

boolean schwarz=false;

boolean weiss=true;

boolean wechsel;

for(int i=0;i<schach.length;i++) {

   

for(int j=0;j<schach.length;j++) {

        if(weiss) {

            schach[i][j]=true;

            System.out.print(schach[i][j]+"    ");

                    }

        else {

            schach[i][j]=false;

        System.out.print(schach[i][j]+"   ");

}

    wechsel=schwarz;

        schwarz=weiss;

      weiss=wechsel;
}


schwarz=!schwarz;

weiss=!weiss;

System.out.println();   

}
]
 

YOES1805

Mitglied
Was meinst du mit nullen und einsen einsetzen? Willst du das direkt beim programm start schon haben oder erst danach?

Und was soll dein Code den machen was hast du vor?
 
Zuletzt bearbeitet:

student2018

Mitglied
also meine 1.Frage wäre ob man das Programm welches nun ein Array(wie ein Schachfeld )ausgibt mit
true false true false true false true false
false true false......etc
verbessern könnte .Und meine zweite Frage wäre was ich verändern müsste um statt true oder false
10101010
01010101 bekommen kann
 

YOES1805

Mitglied
1. Als erstes würde ich dir empfehlen es besser zu formatieren, wenn es so bei dir auch aussieht wie du es hier gepostet hast. An Effizienz kannst du da nichts großes bis nichts machen, da dein Programm eh sehr klein ist.
Noch würde ich das so machen das du die Befüllung nicht in die main Methode machst, sondern eine seperate Methode für die Befüllung machst und ausführst.

Wenn das als Projekt weiterführen willst würde ich sogar diese Sachen in einzelne Klassen machen, sodass du nurnoch Objekte in der main Methode erstellst.
Dies wäre für ein Projekt sehr viel übersichtlicher

Und das am ende mit
Java:
schwarz =! schwarz;
weiss =! weiss;
Dass ist eigentlich nicht relevant, da meines wissens nichts passiert.

2. Du musst als erstes deinen Array typ ändern, in deinem fall auf Integer, damit du 1 und 0 befüllen kannst.
 
Zuletzt bearbeitet:

student2018

Mitglied
1. Als erstes würde ich dir empfehlen es besser zu formatieren, wenn es so bei dir auch aussieht wie du es hier gepostet hast. An Effizienz kannst du da nichts großes bis nichts machen, da dein Programm eh sehr klein ist.
Noch würde ich das so machen das du die Befüllung nicht in die main Methode machst, sondern eine seperate Methode für die Befüllung machst und ausführst.

Wenn das als Projekt weiterführen willst würde ich sogar diese Sachen in einzelne Klassen machen, sodass du nurnoch Objekte in der main Methode erstellst.
Dies wäre für ein Projekt sehr viel übersichtlicher

Und das am ende mit
Java:
schwarz =! schwarz;
weiss =! weiss;
Dass ist eigentlich nicht relevant, da meines wissens nichts passiert.

2. Du musst als erstes deinen Array typ ändern, in deinem fall auf Integer, damit du 1 und 0 befüllen kannst.
 

YOES1805

Mitglied
Nein, dass machst du ja in der zweiten schleife mit der if-else bedingung.

Du änderst ja zuvor die werte von weiss und schwarz

Ich hätte eine andere idee dafür. Du könntest die if-else bedingung ändern, damit du kontrollieren kannst in welcher Zeile du bist und danach könntest du true oder false einsetzen. Dann brauchst du auch, das mit dem wechseln und die drei booleans nicht.
 

YOES1805

Mitglied
Ich hätte eine andere idee dafür. Du könntest die if-else bedingung ändern, damit du kontrollieren kannst in welcher Zeile du bist und danach könntest du true oder false einsetzen. Dann brauchst du auch, das mit dem wechseln und die drei booleans nicht.
 

Robat

Top Contributor
Von mir vielleicht folgende Hinweise:
  • Nenne deine boolean-Variablen nicht nur schwarz oder weiß sondern sowas wie istSchwarz. So kann man auf den ersten Blick sehen, dass es sich um ein boolean handelt.
  • Wenn du in deinem Array Zahlen speichern willst (0 oder 1) würde ich gänzlich auf die if-Abfragen verzichten und mir boolsche Funktionen und Modulo zu nutze machen um auszurechnen ob eine 1 oder 0 rein muss. Hier mal an einem Beispiel demonstriert (mit dem XOR-Operator ^ )
Java:
for(int i = 0; i < field.length; i++) {
    for(int j = 0; j < field[i].length; j++) {
        field[i][j] = i%2 ^ j%2;
        System.out.print(field[i][j] + " ");
    }
    System.out.println("");
}
 

Flown

Administrator
Mitarbeiter
Brauchst du unbedingt ein 2-dimensionales int/boolean array? @Robat hat dir ja gezeigt, wie man Werte on-the-fly berechnet. Dann kann deine Klasse ganz einfach so aussehen:
Java:
public class Test {
  
  public static void main(String... args) {
    ChessBoard board = new ChessBoard(8);
    System.out.println(board);
  }
}

class ChessBoard {
  private final int rows;
  private final int columns;
  
  public ChessBoard(int columns) {
    this(columns, columns);
  }
  
  public ChessBoard(int rows, int columns) {
    this.rows = rows;
    this.columns = columns;
  }
  
  public boolean isWhite(int row, int column) {
    checkBounds(row, column);
    return ((row % 2) ^ (column % 2)) == 0;
  }
  
  public boolean isBlack(int row, int column) {
    return !isWhite(row, column);
  }
  
  private void checkBounds(int row, int column) {
    if(!(0 <= row && row < rows)) {
      throw new IndexOutOfBoundsException(String.format("Row out of bounds: 0 <= %d < %d", row, rows));
    }
    if(!(0 <= column && column < columns)) {
      throw new IndexOutOfBoundsException(String.format("Column out of bounds: 0<= %d < %d", column, columns));
    }
  }
  
  @Override
  public String toString() {
    return toString("1", "0");
  }
  
  public String toString(String white, String black) {
    StringBuilder builder = new StringBuilder();
    for(int row = 0; row < rows; row++) {
      for(int column = 0; column < columns; column++) {
        builder.append(isWhite(row, column) ? white : black);
      }
      builder.append(System.lineSeparator());
    }
  
    return builder.toString();
  }
}
 

Ähnliche Java Themen

Neue Themen


Oben