Schachbrettgerüst

krys001

Mitglied
Hello again,

dieses mal lautet meine Aufgabe ein Schachbrettartiges gerüst folgendermaßen in der Eclipse-konsole auszugeben:
A1 A2 A3 A4 A5 A6 A7 A8
B1 B2 B3 B4 B5 B6 B7 B8
C1 C2 C3 C4 C5 C6 C7 C8
D1 D2 D3 D4 D5 D6 D7 D8
E1 E2 E3 E4 E5 E6 E7 E8
F1 F2 F3 F4 F5 F6 F7 F8
G1 G2 G3 G4 G5 G6 G7 G8
H1 H2 H3 H4 H5 H6 H7 H8

Ich habe dies folgendermaßen gelöst:
Java:
public static void main(String[] args) {
        int x=8;
        int z=1;
        int a=0;
        int b=0;
        int c=0;
        int d=0;
        int e=0;
        int f=0;
        int g=0;
        int h=0;
       
        for (;z<=x;){
            z++;
            while (a<=x){
                a++;
                if (a<x){
                    System.out.print("A"+a+" ");}
                if (a==x){
                    System.out.println("A"+a);}
            }   
            while (b<=x){
                b++;
                if (b<x){
                    System.out.print("B"+b+" ");}
                if (b==x){
                    System.out.println("B"+b);}}
            while (c<=x){
                c++;
                if (c<x){
                    System.out.print("C"+c+" ");}
                if (c==x){
                    System.out.println("C"+c);}}
            while (d<=x){
                d++;
                if (d<x){
                    System.out.print("D"+d+" ");}
                if (d==x){
                    System.out.println("D"+d);}}
            while (e<=x){
                e++;
                if (e<x){
                    System.out.print("E"+e+" ");}
                if (e==x){
                    System.out.println("E"+e);}}
            while (f<=x){
                f++;
                if (f<x){
                    System.out.print("F"+f+" ");}
                if (f==x){
                    System.out.println("F"+f);}}
            while (g<=x){
                g++;
                if (g<x){
                    System.out.print("G"+g+" ");}
                if (g==x){
                    System.out.println("G"+g);}}
            while (h<=x){
                h++;
                if (h<x){
                    System.out.print("H"+h+" ");}
                if (h==x){
                    System.out.println("H"+h);}}
            }
            }
    }
Das ist schon noch recht umfangreich und eigentlich glaub ich nicht ganz die richtige Lösung, trotz korrekter ausgabe. Ich sollte es lösen mit 2 geschachtelten schleifen.
Kann mir da jemand weiterhelfen?
 

redJava99

Bekanntes Mitglied
Statt für jede Zeile eine eigene Variable zu deklarieren, könntest du diese genauso hochzählen wie die Spalten. Auch ein Zeichen (char) lässt sich inkrementieren ;-)
 

Elenteria

Bekanntes Mitglied
Ich würde es Lösen in dem ich mir ein Array mit den Buchstaben erstellen, dann eine for-Schleife in der in der ich das Array durchgeh. in der for-Schleife dann eine weitere for-Schleife mit der du die Zahlen durchgehst und in der die Ausgabe platziert ist.
 

krys001

Mitglied
Das waren schon super Tipps, jetzt habe ich eigentlich nur noch ein Problem:
Mein Code sieht jetzt so aus:
Java:
    public static void main(String[] args) {

        char [] ABC= {'A','B','C','D','E','F','G','H'};
        int z=1;
        int s=1;
        int x=0;
        //Zeilen zählen
        for(;z<=8;z++){               
           
            //Spalten zählen
            for(;s<=8;s++){
                if (s<8)
                    System.out.print(ABC[x] +s+" ");
                if (s==8)
                    System.out.println(ABC[x] +s);
            }
            s=1;
        x++;   
        }
       
    }    }

und meine Ausgabe enthält keine buchstaben a-h sonder:
66 67 68 69 70 71 72 73
67 68 69 70 71 72 73 74
68 69 70 71 72 73 74 75
69 70 71 72 73 74 75 76
70 71 72 73 74 75 76 77
71 72 73 74 75 76 77 78
72 73 74 75 76 77 78 79
73 74 75 76 77 78 79 80

wandelt also die char's in integer um.
wie liese sich dies vermeiden?
 

redJava99

Bekanntes Mitglied
Die Umwandlung passiert, weil zuerst die Addition von ABC[x] + s erfolgt (Ergebnis: int) und dann ein String daras gemacht wird, um ihn auszugeben.
Das lässt sich vermeiden, indem man aus dem char zunächst explizit einen Stirng macht:
String.valueOf(ABX[x])

Was sonst noch auffällt:
  • Die Initialisierung von z und s kannst du auch in die Schleife ziehen. Dann sieht man den Anfangswert gleich da, wo er verwendet wird - nämlich in der Schleife, und nicht schon einige Zeilen vorher.
  • x ist unnötig, stattdessen kannst du z verwenden (Kleine Anpassung wegen des array-Index wird nötig)
  • Dein Array-Name entspricht nicht der Java-Konvention ;-)
Hier noch meine Minimallösung:
Code:
for(char z='A'; z<= 'H'; z++){
   StringBuilder zeilenausgabe = new StringBuilder();
   for(int s=0;s<=8; s++){
      zeilenausgabe.append(z).append(s).append(" ");
   }
   System.out.println(zeilenausgabe.toString().trim());
}
 

PoGoMoTo

Mitglied
Hallo krys001,

habe mich zu Übungszwecken auch an dein Thema gesetzt und dir den Code mal unten reingestellt.
So hätte ich es gelöst :)
Habe es mit Strings versucht.
Vieleicht ist es für Anfänger Übersichtlicher :) zu sehen wie die Schleife arbeitet:)

Java:
class Schachbrett {
  public static void main(String[] args) {
  
    String[] buchstaben = {"A","B","C","D","E","F","G","H"};
    int[] zahlen = {1,2,3,4,5,6,7,8};     
  
    for (int i = 0; i<buchstaben.length ; i++ ) {
      if (i>0) {
        System.out.print("\n");      
      }
      for (int y = 0; y<zahlen.length ;y++ ) {          
        System.out.print(buchstaben[i]+zahlen[y]+" ");      
      }    
    }
  }
}
 

Neue Themen


Oben