# Schachbrett



## Drizzt2812 (29. November 2009)

Hallo Leute!
Ich bin Java-Anfänger und bräuchte wirklich eure Hilfe !

Das hier ist mein bisheriger Quelltext: (es geht um die Programmierung eines Schachbrettlayouts)


```
public class ChessBoard2 {
    	
	public static void printBorderText (int colums){
	
	if ()

	}

     public static void printBorder (String number) {
 
    	 for (int numberCounter = 1; numberCounter <= 24; numberCounter++)
    	 
    	{
    		System.out.print(number);  
    	}
    	 System.out.printf("\n");
    }
		
		public static void main(String [] args) {
		printBorder("*");
	
		
	String whiteField = "  ";
	String blackField = "XX";
	
	for (int wholeField =1; wholeField <=8; wholeField++) 
	{
		System.out.print("*  ");
		
	for (int field = 1; field <= 8; field++)	 
	
		
	if ( (field + wholeField) % 2   != 0)
		
	{
	System.out.print(whiteField);     
	}
	else  
	{
	System.out.print(blackField);   
	}
	
	System.out.printf("    *");   
	System.out.printf("\n"); 
	}
	printBorder("*"); 
	
	}
 }
```

Dabei kommt das hier raus


```
************************
*  XX  XX  XX  XX      *
*    XX  XX  XX  XX    *
*  XX  XX  XX  XX      *
*    XX  XX  XX  XX    *
*  XX  XX  XX  XX      *
*    XX  XX  XX  XX    *
*  XX  XX  XX  XX      *
*    XX  XX  XX  XX    *
************************
```

nun soll ich mit einer Methode über die erste Zeile die Buchstaben a - h   programmieren..aber WIE?
das sollen wir mit einer Methode (die hab ich schon in meinem Quelltext ganz oben angefangen (weiter kam ich nicht) und einer IF-Kaskade machen.

************************
   a   b  c d  e f g  h 
*  XX  XX  XX  XX      *
*    XX  XX  XX  XX    *
*  XX  XX  XX  XX      *
*    XX  XX  XX  XX    *
*  XX  XX  XX  XX      *
*    XX  XX  XX  XX    *
*  XX  XX  XX  XX      *
*    XX  XX  XX  XX    *
************************

So (natürlich schöner) müsste das dann aussehen am Schluss
das gleiche müsse wir dann noch mit den Zahlen 1 - 8 machen, damit es dann so aussieht:

************************
          a b  c d e f g h 
* 8    XX  XX  XX  XX     8 *
* 7   XX  XX  XX  XX    7*
* 6  XX  XX  XX  XX      6*
* 5    XX  XX  XX  XX    5*
* 4  XX  XX  XX  XX     4 *
* 3    XX  XX  XX  XX    3*
* 2  XX  XX  XX  XX    2  *
* 1    XX  XX  XX  XX  1  *
************************

Natürlich auch programmiert und schöner....aber ich hab da echt keine Ahnung und bin am Ende meines Lateins, bitte helft mir, wär euch wirklich sehr dankbar !

mfg


----------



## Athropos (29. November 2009)

Nachdem du (falls ich nix übersehen habe) nur in die Konsole ausgibst, kannst du nachträglich Nichts über irgendwas Anderes schreiben.

Was du dir (deinem Beispiel folgend) überlegen könntest, wäre die 2. Zeile (a,b, ..) wie von dir überlegt mit einer if-Kaskade zu erstellen oder einfach die Werte in ein Array geben und dieses Anzeigen.

8 - 1 funktionieren analog.


----------



## Jellysheep (29. November 2009)

Ich würde das Ganze, wie Athropos schon sagte, mit einem Array lösen:

```
public class ChessBoard
{
    public ChessBoard()
    {
        int anz_feld = 30;
        String[][] feld = new String[anz_feld+4][anz_feld+5];
        for(int i = 0; i<anz_feld+4; i++){
            feld[0][i] = "* ";
        }
        feld[1][0] = "* ";
        feld[1][1] = "  ";
        for(int i = 2; i<anz_feld+2; i++){
            feld[1][i] = ""+(char)(63+i)+" ";
        }
        feld[1][anz_feld+2] = "  *";
        for(int y = 2; y<anz_feld+2; y++){
            feld[y][0] = "* ";
            if(anz_feld-y+2<10){
                feld[y][1] = ""+(anz_feld-y+2)+" ";
            }else{
                 feld[y][1] = ""+(anz_feld-y+2);
            }
            for(int x = 2; x<anz_feld+2; x++){
                if((x%2 == 0) == (y%2 == 0)){
                    feld[y][x] = "XX";
                }else{
                    feld[y][x] = "  ";
                }
            }
            if(anz_feld-y+2<10){
                feld[y][anz_feld+1] = "  "+(anz_feld-y+2);
            }else{
                 feld[y][anz_feld+1] = " "+(anz_feld-y+2);
            }
            feld[y][anz_feld+2] = " *";
            feld[y][anz_feld+3] = " ";
            
        }
        feld[anz_feld+2][0] = "* ";
        feld[anz_feld+2][1] = "  ";
        for(int i = 2; i<anz_feld+2; i++){
            feld[anz_feld+2][i] = ""+(char)(63+i)+" ";
        }
        feld[anz_feld+2][anz_feld+2] = "  *";
        for(int i = 0; i<anz_feld+4; i++){
            feld[anz_feld+3][i] = "* ";
        }
        for(int y = 0; y<anz_feld+4; y++){
            for(int x = 0; x<anz_feld+5; x++){
                if(feld[y][x] == null){
                    System.out.print("  ");
                }else{
                    System.out.print(feld[y][x]);
                }
            }
            System.out.print("\n");
        }
    }
    public static void main(String [] args){
        new ChessBoard();
    }
}
```

*EDIT: *
Meine Ausgabe:

```
* * * * * * * * * * * *   
*   A B C D E F G H   *    
* 8 XX  XX  XX  XX  8 *   
* 7   XX  XX  XX    7 *   
* 6 XX  XX  XX  XX  6 *   
* 5   XX  XX  XX    5 *   
* 4 XX  XX  XX  XX  4 *   
* 3   XX  XX  XX    3 *   
* 2 XX  XX  XX  XX  2 *   
* 1   XX  XX  XX    1 *   
*   A B C D E F G H   *    
* * * * * * * * * * * *
```


----------



## Vereth (30. November 2009)

Eine if-Kaskade ist dasselbe wie eine if-else-if-Kette. Deine Methode müsste also lauten:


```
public static void printBorderText (int column){
  if ( column == 0 ) print "    A";
  else if ( column == 1 ) print " B";
  else if ( column == 2 ) print " C";
  usw.
}
```

Achte darauf, dass bei dem A genügend Leerzeichen ausgegeben werden, damit die Buchstaben korrekt über den Spalten ausgegeben werden. Bei den Zeilenziffern kannst du es dann ähnlich machen.


----------

