Schachbrett mit for- oder while-Schleife

Status
Nicht offen für weitere Antworten.

justice

Mitglied
Hallo zusammen,

ich muss für die Uni ein Java-Programm erstellen und komme einfach nicht weiter. Vielleicht könnt ihr mir ja helfen.

Ich soll mittels for- oder while-Schleifen ein "Schachbrett" erstellen, welches folgendermaßen aussehen soll:
Code:
|O|O|L|O|O|O|O|O|
|O|O|O|O|O|O|O|O|
|O|O|O|O|B|O|O|O|
|O|O|O|O|O|O|O|O|
|K|O|O|O|O|O|T|O|
|O|O|O|O|O|O|O|O|
|O|O|O|B|O|O|O|O|
|O|O|O|O|O|O|O|O|


Das Schachbrett bekomme ich hin, allerdings habe ich keine Ahnung, wie ich die "Schachfiguren" in das Brett bekomme.

Mein Code sieht bis jetzt so aus:

Java:
public class Chess {
	
	public static void main (String[] args) {
		String o = "|O";
		String l = "|L";
		String b = "|B";
		String k = "|K";
		String t = "|T";
		
		for (int i = 1; i <= 8; i++) {
			for (int j = 1; j <= 8; j++)
				System.out.print(o);
				System.out.print("|");
			System.out.println();
		}
		
	}
}


Vielen Dank für eure Hilfe!
 

Marco13

Top Contributor
Wah. :eek: nein, nicht einfach so ausgeben. Das kann nicht das Ziel der Übung sein. (Und stell dir mal vor, nächste Woche soll ein Schachbrett mit einer anderen Konstellation ausgegeben werden - dann darfst du alles nochmal machen).

Ich einfachsten Fall würde man das in einen 2D-Array packen, aber eine Klasse wäre sauberer und flexibler. Überleg' dir mal, wie eine Klasse "Board" aussehen könnte, die man z.B. so verwenden könnte:
Code:
Board board = new Board(8,8);
board.set(0,2, 'L');
board.set(2,4, 'B');
...
board.print(); // Gibt das aktuelle Brett aus
 

Lexi

Bekanntes Mitglied
Sollen die Figuren immer an der gleichen Stelle bleiben ? Also musst du nur einmal dieses Schachbrett, wie du es gepostet hast, ausgeben ?

Edit: Ein nein auf meine Frage, hätte einen Vorschlag zu Tage gefördert, der soähnlich ist, wie der von Marco.^^
 

justice

Mitglied
Sollen die Figuren immer an der gleichen Stelle bleiben ? Also musst du nur einmal dieses Schachbrett, wie du es gepostet hast, ausgeben ?

Ja, das Schachbrett muss nur einmal in dieser Konstellation ausgegeben werden.
Die von Marco13 angesprochene Variante kenne ich noch gar nicht, lerne Java erst seit einem Monat.

Aber danke schon mal euch beiden!
 

Lexi

Bekanntes Mitglied
Der Ansatz von Marco ist objekt orientiert. Daraus resultieren viele Vorteile, wie z.B. die von ihm angesprochene Flexibilität, die es erlaubt später ohne großen Aufwand den Code zu verändern.

Da Java eine objekt orientierte Sprache ist, ist dies generell gesehen der bessere Weg.
Wenn du jetzt aber nur einmal so eine, sagen wir "statische" Ausgabe haben möchtest, kann man das auch noch anders machen.

Du fragst einfach ab ob i und j gerade die Position repräsentieren, an der z.B. ein "L" stehen soll, wenn das der Fall ist printest du "L" aus, ansonsten machst du dein Standartprogramm ( "|O" ).

Das ist ein sehr unschöner Ansatz. Sobald du in die OO Programmierung einsteigst wirst du sehen wie viele Vorteile du daraus ziehen kannst. Wäre bestimmt interessant, wenn du diese Aufgabe in ein oder zwei Monaten nochmal bearbeiten würdest.
 

justice

Mitglied
Du fragst einfach ab ob i und j gerade die Position repräsentieren, an der z.B. ein "L" stehen soll, wenn das der Fall ist printest du "L" aus, ansonsten machst du dein Standartprogramm ( "|O" ).

Genau diesen Tipp habe ich schon erhalten, jedoch weiß ich nicht wirklich, wie ich das umsetzen soll. Also wie ich abfragen kann, an welcher Stelle was steht.

Dass das eine sehr unschöne Weise ist, wurde uns schon im Vorfeld gesagt, wir sollen dadurch wohl erstmal einige Basics lernen.
 

Lexi

Bekanntes Mitglied
Abfragen tust du das mit einer normalen if - Abfrage.
Wenn dort i == 1 && j == 3 ist, dann printe ein "L" aus.
Wenn das nicht der Fall ist ( else ), dann printe ein "|O" aus.
 

Marco13

Top Contributor
Hmmm... irgendwie erschließt sich mir der didaktische Sinn hier nicht ganz.
Code:
for (int i=0; i<1; i++)
{
    System.out.println("|O|O|L|O|O|O|O|O|");
    System.out.println("|O|O|O|O|O|O|O|O|");
    System.out.println("|O|O|O|O|B|O|O|O|");
    System.out.println("|O|O|O|O|O|O|O|O|");
    System.out.println("|K|O|O|O|O|O|T|O|");
    System.out.println("|O|O|O|O|O|O|O|O|");
    System.out.println("|O|O|O|B|O|O|O|O|");
    System.out.println("|O|O|O|O|O|O|O|O|");
}
Aber vielleicht muss er das ja garnicht.
 

justice

Mitglied
Hmmm... irgendwie erschließt sich mir der didaktische Sinn hier nicht ganz.
Code:
for (int i=0; i<1; i++)
{
    System.out.println("|O|O|L|O|O|O|O|O|");
    System.out.println("|O|O|O|O|O|O|O|O|");
    System.out.println("|O|O|O|O|B|O|O|O|");
    System.out.println("|O|O|O|O|O|O|O|O|");
    System.out.println("|K|O|O|O|O|O|T|O|");
    System.out.println("|O|O|O|O|O|O|O|O|");
    System.out.println("|O|O|O|B|O|O|O|O|");
    System.out.println("|O|O|O|O|O|O|O|O|");
}
Aber vielleicht muss er das ja garnicht.

Das wäre natürlich die einfachste Lösung, aber gerade so sollen wir es nicht machen. Frag mich bitte nicht nach dem Sinn...

Eine Frage noch: Muss ich die if-Schleife in der for-Schleife verschachteln? Das Ergebnis sieht immer noch nicht so aus, wie es sollte.
 

Lexi

Bekanntes Mitglied
Ich weiß nicht, ob man das unbedingt verschachteln nennt. Die if-Abfrage muss in dem Body der inneren for-Schleife stehen.
Du willst ja jedesmal bevor du was ausgibst prüfen ob jetzt ein "|L" o.ä. ausgegeben werden soll, anstatt einem "|O".

Java:
	for( ... ){
	if( ... ){
		doSomething();
	}
}
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
was genau studierst du?
falls das entwickeln von software ein zentraler bestandteil deines studiums ist, würd ich mir das beispiel nochmal ansehen und veruchen es alleine zu lösen... da das verstehen der grundlagen zu beginn sehr sehr wichtig ist...

falls du irgend ein mediendesigner oder physiker bist, die java nur so nebenbei haben, kannst es ruhig sagen, kann dir gern morgen eine lösung posten...
 

justice

Mitglied
was genau studierst du?

Ich studiere Medienwissenschaften, Java ist aber schon ein zentraler Bestandteil meines Studiums, daher möchte ich es auch gern selbst verstehen und lösen.

Ist habe es jetzt mit folgendem Code versucht:

Java:
public class Chess {
	
	public static void main (String[] args) {
		String o = "|O";
		String l = "|L";
		String b = "|B";
		String k = "|K";
		String t = "|T";
		
		for (int i = 1; i <= 8; i++) {
			
			for (int j = 1; j <= 8; j++) {
				
				if (i == 1 && j == 3) {
					System.out.print(l);
				}
				
				if (i == 3 && j == 5) {
					System.out.print(b);
				}
				
				if (i == 5 && j == 1) {
					System.out.print(k);
				}
				
				if (i == 5 && j == 7) {
					System.out.print(t);
				}
				
				if (i == 7 && j == 4) {
					System.out.print(b);
				}
				
				if (i <= 8 && j == 8) {
					System.out.print("|");
					System.out.println();
				}
				
				else {
					System.out.print(o);
				}
			}
		}
		
	}
}


Allerdings gibt mir Eclipse jetzt folgendes aus:

Code:
|O|O|L|O|O|O|O|O|
|O|O|O|O|O|O|O|
|O|O|O|O|B|O|O|O|
|O|O|O|O|O|O|O|
|K|O|O|O|O|O|O|T|O|
|O|O|O|O|O|O|O|
|O|O|O|B|O|O|O|O|
|O|O|O|O|O|O|O|


Was mache ich falsch und ist mein Lösungsansatz überhaupt zu gebrauchen?
 

Illuvatar

Top Contributor
Ich glaube, du meinst das richtige - es ist nur noch nicht ganz richtig aufgeschrieben ;)

Was du sagen willst, ist zum Beispiel (gekürzt): "Wenn i=1 und j=3, dann L, oder wenn* i=3 und j=5, dann B, ansonsten O. Danach ein Trennstrich, falls das Zeilenende erreicht ist."

Was du sagst ist: "Wenn i=1 und j=3, dann L. Wenn i=3 und j=5, dann B. Danach, falls das Zeilenende erreicht ist, ein Trennstrich, ansonsten O"

*das nennt sich "else if"!
 

justice

Mitglied
Vielen Dank, das war der entscheidende Tipp :)
Habe es jetzt mit diesem Code hinbekommen:

Java:
public class Chess {
	
	public static void main (String[] args) {
		String o = "|O";
		String l = "|L";
		String b = "|B";
		String k = "|K";
		String t = "|T";
		
		for (int i = 1; i <= 8; i++) {
			
			for (int j = 1; j <= 8; j++) {
				
				if (i == 1 && j == 3) {
					System.out.print(l);
				}
				
				else if (i == 3 && j == 5) {
					System.out.print(b);
				}
				
				else if (i == 5 && j == 1) {
					System.out.print(k);
				}
				
				else if (i == 5 && j == 7) {
					System.out.print(t);
				}
				
				else if (i == 7 && j == 4) {
					System.out.print(b);
				}
				
				else {
					System.out.print(o);
				}
				
				if (i <= 8 && j == 8) {
					System.out.print("|");
					System.out.println();
				}
				
			}
		}
		
	}
}

Kann ich die beiden if-Abfragen, bei denen String b ausgegeben werden soll noch zusammenfassen? Entschuldigt bitte meine dummen Fragen, ich stehe was Java angeht wirklich noch ganz am Anfang ;)

Euch allen vielen, vielen Dank für eure Hilfe und eure Geduld!!
 

Illuvatar

Top Contributor
Kann ich die beiden if-Abfragen, bei denen String b ausgegeben werden soll noch zusammenfassen?

Ja, kannst du. Ähnlich wie das && - den "und"-operator, gibt es auch das || ("oder").
Also in etwa so:
Java:
else if ((i == 3 && j == 5) || (i == 7 && j == 4)) {
   System.out.print(b);
}
 

ARadauer

Top Contributor
ahh das muss ich mich gleich wieder ärgern... das was du da programmierst ist im grunde nix anders als das was marco zum spaß gepostet hat... ich zeig dir mal wie ich die aufgabenstellung verstanden habe bzw wie ich mir das vorstelle und dann sagst du mir was flexibler und sinnvoller ist....

Java:
package chess;

public class Chess {
   
  public static String OFFEN = "O";
  public static String LAEUFER = "L";
  public static String BAUER = "B";
  public static String KOENIG = "K";
  public static String TURM = "T";
   
   String[][] board;
   
   public Chess(){
      board = new String[8][8];
      for(int i = 0; i<board.length; i++){
         for(int j = 0; j<board[i].length; j++){
            board[j][i] = OFFEN;
         }
      }
   }
   
   public void setFigur(int x, int y, String figur){
      //Überprüfung ob am Feld einbauen...
      board[y][x] = figur;
   }

   public String getFigur(int x, int y){
      //Überprüfung ob am Feld einbauen...
      return board[y][x];
   }
   
   public void ausgabe(){
      for(int i = 0; i<board.length; i++){
         for(int j = 0; j<board[i].length; j++){
           System.out.print("|"+board[i][j]);
         }
         System.out.println("|");
      }
     
   }
}

Java:
package chess;

public class ChessTest {

   public static void main(String[] args) {
      Chess chess = new Chess();
      chess.setFigur(2, 0, Chess.LAEUFER);
      chess.setFigur(4, 2, Chess.BAUER);
      chess.setFigur(0, 4, Chess.KOENIG);
      chess.setFigur(6, 4, Chess.TURM);
      chess.setFigur(4, 6, Chess.BAUER);
      chess.ausgabe();
   }
}
 

justice

Mitglied
ahh das muss ich mich gleich wieder ärgern... das was du da programmierst ist im grunde nix anders als das was marco zum spaß gepostet hat... ich zeig dir mal wie ich die aufgabenstellung verstanden habe bzw wie ich mir das vorstelle und dann sagst du mir was flexibler und sinnvoller ist....

Flexibler und sinnvoller ist sicherlich deine Variante, allerdings sind wir noch nicht auf dem Wissensstand, das auch so zu lösen. Laut Aufgabenstellung sollten wir auch sämtlichen Code direkt in die main-Methode schreiben. Ansonsten gebe ich dir natürlich Recht, das Ergebnis ist im Prinzip genauso unflexibel wie die Lösung mit den acht Strings.
 

ARadauer

Top Contributor
aber im grunde ist es ja egal....
kann man ja so auch machen

Java:
package chess;

public class ChessTest {

   public static String OFFEN = "O";
   public static String LAEUFER = "L";
   public static String BAUER = "B";
   public static String KOENIG = "K";
   public static String TURM = "T";

   public static void main(String[] args) {

      //Brett initialiseren
      String[][] board = new String[8][8];
      for(int i = 0; i<board.length; i++){
         for(int j = 0; j<board[i].length; j++){
            board[j][i] = OFFEN;
         }
      }

      //Figuren setzen
      board[2][0] = Chess.LAEUFER;
      board[4][2] = Chess.BAUER;
      board[0][4] = Chess.KOENIG;
      board[6][4] = Chess.TURM;
      board[4][6] = Chess.BAUER;

      //Ausgeben
      for(int i = 0; i< board.length; i++)
         for(int j = 0; j<board[i].length; j++){
            System.out.print("|"+board[i][j]);
         }
      System.out.println("|");
   }

}
mir ist wichtig, dass du den sinn dahinter verstehts... das array stellt das Brett da, man kann es erzeugen, manipuliteren, darstellen..
 

justice

Mitglied
Den Sinn dahinter habe ich jetzt auch verstanden - glaube ich zumindest ;)
Echt super, wie ihr euch hier bemüht, vielen Dank!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Schachbrett mit while-schleifen Allgemeine Java-Themen 7
S Java Applet: digitales Schachbrett Allgemeine Java-Themen 7
G Zug eines Pferdes auf dem Schachbrett Allgemeine Java-Themen 3
W While Schleife funktioniert nicht ganz Allgemeine Java-Themen 4
H do-while Schleife funktioniert nicht wie ich es möchte Allgemeine Java-Themen 7
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
D While-Schleife - if Zweig unterbrechen Allgemeine Java-Themen 1
T String aus While Schleife für ganze Klasse sichtbar machen Allgemeine Java-Themen 5
M While-Schleife schneller, solange die Abbruchbedingung nicht vom Schleifeninneren abhängt Allgemeine Java-Themen 3
J While Schleife ausführen bis Zahl = X Allgemeine Java-Themen 19
A Swing Taschenrechner while Schlaufe Allgemeine Java-Themen 12
I NullPointer während while(){} Allgemeine Java-Themen 4
N Frage zur while-Schleife Allgemeine Java-Themen 18
G while Schleife ausführen solange eine Taste gedrückt ist Allgemeine Java-Themen 14
S for-Schleife, while-Schleife Problem Allgemeine Java-Themen 6
R while schleife auf 3 durchgänge beschränken Allgemeine Java-Themen 6
V anstatt thread.join() einfach while schleife? Allgemeine Java-Themen 8
D ProcessBuilder und die while() Allgemeine Java-Themen 3
S Do-While Schleife bricht nicht ab Allgemeine Java-Themen 3
S Erste Schritte if-Anweisung in for- oder while-schleife umwandeln Allgemeine Java-Themen 3
T Rekursion mit While Schleife kombinieren? Allgemeine Java-Themen 4
J Thread pausieren, lange while-Schleife Allgemeine Java-Themen 8
W While-ESC-Schleife funktioniert nicht Allgemeine Java-Themen 3
H Threads.... ich will aus der While-Schleife raus Allgemeine Java-Themen 6
V Problem in While-Schleife Allgemeine Java-Themen 3
J Konsolen Anwendung mit while(true) Allgemeine Java-Themen 6
T getParameter in while schleife Allgemeine Java-Themen 3
O while - Schleife unterbrechen mit break; Allgemeine Java-Themen 5
M Problem mit while/do Schleife Allgemeine Java-Themen 12
B Try/Catch in While-Schleife mit Scanner - Hilfe! Allgemeine Java-Themen 3
N while Schlauf und ActionEvent Allgemeine Java-Themen 2
L Exception auslösen, um while Schlaufe zu verlassen(rxtx.org) Allgemeine Java-Themen 6
F While(true)-Schleife im JPanel Allgemeine Java-Themen 9
N vergleich mit while und for schleife Allgemeine Java-Themen 7
B while mit BufferedReader beenden Allgemeine Java-Themen 5
T Verschachtelte For-Schleife gibt falschen Wert zurück, Abbruchbedingung evtl. falsch? Allgemeine Java-Themen 9
A verschachtelte for-Schleife in einen Stream umwandeln? Allgemeine Java-Themen 4
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
berserkerdq2 Wie synchronisiere ich eine for-Schleife Allgemeine Java-Themen 12
N Warum wird die For Schleife nicht betreten Allgemeine Java-Themen 4
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
A For-Schleife Allgemeine Java-Themen 5
J Algorithmen Analyse einer Schleife Allgemeine Java-Themen 6
1 Klassen Variabel aus Schleife übergeben Allgemeine Java-Themen 8
D "Automatisierte", variable verschachtele for-Schleife Allgemeine Java-Themen 9
F Schleife funktioniert nicht richtig Allgemeine Java-Themen 13
K For-Schleife <> oder != Operator verwenden? Allgemeine Java-Themen 2
J Einen Thread in einer Schleife Allgemeine Java-Themen 2
F Zweifache For-Schleife Allgemeine Java-Themen 6
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
S Variablen String[] Array per schleife in int[] einlesen Allgemeine Java-Themen 8
D Methoden Buttons erscheinen doppelt nach Wiederholung in Schleife Allgemeine Java-Themen 1
RalleYTN Problem bei Schleife die durch einen 2D raum iterieren soll Allgemeine Java-Themen 1
T for - Schleife Allgemeine Java-Themen 1
R Komplizierte Schleife Allgemeine Java-Themen 1
Q For-Schleife in String-Value Allgemeine Java-Themen 3
F Abstrakte Klasse in "For each" Schleife Allgemeine Java-Themen 1
F for-Schleife auf Kommandoebene ausgeben Allgemeine Java-Themen 9
P Input/Output java.util.Scanner in einer Schleife und Exception-Behandlung: Einlesen einer Zahl Allgemeine Java-Themen 4
P Erweiterte For Schleife Allgemeine Java-Themen 7
D Arraylist/For Schleife/Scanner Allgemeine Java-Themen 30
Y automatisierte for Schleife Allgemeine Java-Themen 13
B For schleife und weiter? Allgemeine Java-Themen 8
D Probleme bei for-Schleife Allgemeine Java-Themen 4
L einfache Verzinsung mit for-Schleife & Ausschluss von Werten beim Einlesen Allgemeine Java-Themen 5
M for Schleife mit Swing Button abbrechen Allgemeine Java-Themen 7
M PdfPTable per for-Schleife befüllen Allgemeine Java-Themen 3
F for-Schleife mit : Allgemeine Java-Themen 5
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
W Problem mit Index in einer for-Schleife Allgemeine Java-Themen 8
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
P Variablen Auf durch for-Schleife generierte JComboBox zugreifen Allgemeine Java-Themen 3
F Foreach und for - Schleife Allgemeine Java-Themen 10
W Berechnung Durchschnitt mit Schleife Allgemeine Java-Themen 9
H Netbeans Warning bei Thread.sleep in Schleife Allgemeine Java-Themen 4
A java.lang.NullPointerException bei Schleife Allgemeine Java-Themen 3
S Erste Schritte Exception beendet Schleife nicht - Methode macht trotz throw weiter? Allgemeine Java-Themen 9
x22 for-Schleife Allgemeine Java-Themen 76
S Text in for Schleife in Label einfügen Allgemeine Java-Themen 4
J Schleife mit : Allgemeine Java-Themen 18
S Klassen in einer Schleife durchlaufen Allgemeine Java-Themen 11
E Schleife wird nicht ausgeführt!!! Allgemeine Java-Themen 8
C Schleife mit leerem Anweisungsblock wird trotz erfüllter Bedingung nicht verlassen Allgemeine Java-Themen 9
K CheckBox schleife Allgemeine Java-Themen 2
D Methoden Thread Schleife Status Allgemeine Java-Themen 7
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
R In einer for Schleife bei einem Substring anfangen, wo man davor aufgehört hat Allgemeine Java-Themen 6
D Sterne Muster mit einer Schleife Allgemeine Java-Themen 5
Dragonfire Code Konvention for-Schleife / return Allgemeine Java-Themen 15
hdi Detail-Frage zur for-Schleife Allgemeine Java-Themen 9
Q Variable aus Schleife/Switch benutzen Allgemeine Java-Themen 7
J Erweiterte For-Schleife mit Vector Allgemeine Java-Themen 5
C Geschachtelte For-Schleife: Äußere Schleife wird nur einmal durchlaufen!? Allgemeine Java-Themen 3
W return Collection mit schleife durchsuchen Allgemeine Java-Themen 10
calzone Warum wird nicht aus der Schleife gesprungen ? Allgemeine Java-Themen 2
lacyuu Schleife hängt sich auf, wieso?? Allgemeine Java-Themen 2
ModellbahnerTT Problem: Schleife über Textdatei Allgemeine Java-Themen 5
S Wie gross ist die Laufzeit für diese Schleife?? Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben