# Schachbrett mit Hilfe von while-Schleifen



## JSJS (29. Nov 2012)

Unsere Aufgabenstellung: Schreiben Sie ein Programm Chessboard das eine ganze Zahlen als Kommandozeilenparameter akzeptiert und ein Schachbrett dieser Größe ausgibt.

Statt der Farben Weiß und Schwarz verwenden Sie die Symbole - und +. Das erste ausgegebene Symbol muss ein - sein.

Die Symbole wechseln dann jeweils ab, so dass nie zwei gleiche Symbole direkt neben- oder untereinander stehen. Geben Sie nach jedem Symbol außer dem letzten in einer Zeile ein Leerzeichen aus.

Weiterhin sollen wir nur while-Schleifen verwenden...

Einige Ansatzvorschläge währen sehr hilfreich....vielen Dank im Voraus


----------



## Volvagia (29. Nov 2012)

Eine Zählervariable und Modulo wird dir bei den unterschiedlichen Ausgaben sicher helfen.


----------



## TryToHelp (29. Nov 2012)

Ich würde sagen, du brauchst 2 verschachtelte Schleifen, eine für die Zeile eine für die Spalten.
so als Tip


```
for (int i=0;i<8;i++){
  //tue etwas 8 mal
}

int i=0;
while (i<8){
   i++;
   //tue etwas 8 mal
}
```

machen das gleiche, und mit der for-Variante findest du sicherlich leicht eine Lösung, wenn du konkrete Fragen hast, trau dich sie zu stellen


----------



## langhaar! (29. Nov 2012)

Ansatzvorschläge? Fällt dir dazu selber echt nichts ein? Ganz grob skizziert:

Solange Länge des Schachbretts/2 nicht erreicht füge  - + hinzu
und dies machst du solange wie die Breite des Schachbretts nicht erreicht ist.


----------



## Kevin94 (29. Nov 2012)

Da es das ganze quadratisch werden soll, brauchst du zwei verschachtelte Schleifen. Am einfachsten ginge es mit for-Schleifen, aber da while Pflicht ist, musst du sie nachbilden.

```
int i=0;
while(i<size)
{
//...
i++;
}
```

Bei der Ausgabe sollten dir der Modulo und der EX-OR Operator ein Hilfe sein. Wenn beide für dir nur Bahnhof sagen, setzt es mit zwei boolean Flags um. Eins für das Zeichen am Zeilenanfang und eins für das aktuelle. Nach einem Durchlauf der inneren bzw. äußeren Schleife dann das entsprechende Flag einfach negieren.


----------



## TryToHelp (29. Nov 2012)

Ich sehe mein Tipp wurde nochmal gegeben, es geht auch mit einer Schleife, die zwei sind nicht nötig, machen es aber einfacher ;-)
Und man muss dran denken, das bei Zeile eins mit 
	
	
	
	





```
-
```
 aber bei Zeile zwei dann mit 
	
	
	
	





```
+
```
 begonnen werden muss, nur so als tipp, bei der zwei schleifen variante kam ja schon der Tip mit dem 
	
	
	
	





```
%
```
 Operator ;-)


----------



## S.K. (6. Dez 2012)

Wenn du mit der Aufgabe schon Probleme hast dann schau dir mal die Aufgabe mit den ChristmasTree an 

Hier mein Code zur Lösung. Leider gibt er auch als letztes Zeichen jeder Reihe noch ein zusätzliches Leerzeichen aus.


```
public class Chessboard {
    public static void main(String[] args) {
        int a = Integer.parseInt(args[0]);
        int b = Integer.parseInt(args[0]);
        int k = 1;
        int i = 1;
            while (k <= b){
                k++;
                i = 1;
                while(i <= a){
                    i++;
                    if((i + k) % 2 !=0)
                        System.out.print("+");
                    else
                        System.out.print("-");
                System.out.print(" ");    
                }
                System.out.print("\n");
            }
        }
    }
```

Gruß S.K.


----------



## S.K. (6. Dez 2012)

So ich glaub jetzt habe ich es mit Zusatzaufgabe hin bekommen 


```
public class Chessboard {

    public static void main(String[] args) {

        int a = Integer.parseInt(args[0]);
        int x = Integer.parseInt(args[1]);
        int y = Integer.parseInt(args[2]);
        int b = a;
        int k = 1;
        int i = 1;
            while (k <= b){
                k++;
                i = 1;
                while(i <= a){
                    i++;
                    if (i-1 == x && k-1 == y)
                        System.out.print("X");
                    else
                    if((i + k) % 2 !=0)
                        System.out.print("+");
                    else
                        System.out.print("-");
                if (i <= a)
                    System.out.print(" ");    
                }
                System.out.print("\n");
            }
        }
    }
```

Ist aber sicherlich nicht der Königsweg, vllt. könnte man hier auch mit Arrays arbeiten. Was meint Ihr dazu?


----------



## fibeline (6. Dez 2012)

S.K. hat gesagt.:


> ...
> Ist aber sicherlich nicht der Königsweg, vllt. könnte man hier auch mit Arrays arbeiten. Was meint Ihr dazu?



Ein Schachbrett schreit geradezu nach einem zweidimensionalen Array... 

Gruß


----------



## Kevin94 (6. Dez 2012)

Wenn man ein Schachspiel programmieren sollte würde ich dir Recht geben. So halte ich das für mit Kanonen auf Spatzen schießen. Es geht ohne wesentlich leichter.


----------



## fibeline (6. Dez 2012)

Da er das nicht ohne Weiteres hin bekommt, ist das ne gute Übung für den Umgang mit mehrdimensionalen Arrays. Klar gehts auch einfacher, so wie fast alles, was man am Anfang vom Programmieren-Lernen macht


----------

