4Gewinnt
-
Hallo ihr Lieben, sitze grad an meinem ersten Java Programm und weiß nicht so ganz weiter. Soll 4 Gewinnt werden. Wie kann ich sone Art do-while schleife wie in C machen, quasi das sich das Progamm immer wieder neu startet?
Außerdem find ich die Fehler nicht, hab bestimmt auch paar Ansätze falsch programmiert.import java.util.Scanner; public class viergewinnt { private static int readNextZug (){ Scanner scan = new Scanner(System.in); System.out.println(" "); System.out.println(">>Geben Sie Ihren Spielzug als Großbuchstaben ein:<<"); String line = scan.nextLine(); if(line.length()!=1){ throw new IllegalArgumentException("Es wurde keine gueltige Option angegeben!"); } char auswahl = line.charAt(0); int Wurf = auswahl - '0'; return Wurf; } private static char Spieler(){ int Spieler1 = 0; int Spieler2 = 1; char lol = '0'; char lol2 = 'X'; if(Spieler2>Spieler1 && Spieler1 == Spieler2){ Spieler1++; return lol; } else{ Spieler2++; return lol2; } } private static void zeichenSpielFeld ( char [][] Spielfeld ){ System.out.println(">>> Vier Gewinnt! <<<"); int i = 0; int j = 0; for (i = 0; i<8; i++ ){ for (j = 0; j<9; j++ ){ System.out.print("|"); System.out.print(Spielfeld[i][j]); System.out.print("|"); } System.out.println(""); } System.out.print("|A| B| C| D| E| F| G| H| I|"); } private static boolean einwerfen( char [][] spielfeld, int roehre ){ int i = 0; while(i<8){ if(spielfeld[roehre][i] != '0' && spielfeld[roehre][i] != 'X' ){ spielfeld[roehre][i] = Spieler(); return true; } else{ i++; } } return false; } public static void main ( String[] args){ char [][] spielfeld = new char[8][9]; zeichenSpielFeld(spielfeld); einwerfen(spielfeld, readNextZug() ); zeichenSpielFeld(spielfeld); } }
-
FoxIsMe schrieb:
Außerdem find ich die Fehler nicht, hab bestimmt auch paar Ansätze falsch programmiert.
Du bekommst bestimmt eher Hilfe, wenn du die Fehler hier auch nennst...
-
Ich habe selber nie ein 4 gewinnt programmiert. Aber vielleicht wäre es für dich als C-Programmiere nicht schlecht dich erst einmal etwas mit OOP zu befassen. Alle Methoden eifach als static zu deklarieren scheint mir doch ein ziemlich grosser Desing-Fehler zu sein. Statische Methoden sollte man möglichst vermeiden.
-
icarus2 schrieb:
Statische Methoden sollte man möglichst vermeiden.
Wer sagt das?
-
Ich, aus eigener Erfahrung XD
Ich hatte mich und andere schon dabei erweischt einfach alle Methoden statisch zu machen, weil dann der Compiler nicht mehr gemeckert hat ^^
Ich weiss nicht ob das hier auch der Fall ist, könnte aber sein. C ist ja nicht objektorientiert.*Edit
Auch gute Programmierer haben mir das gesagt
-
icarus2 schrieb:
Ich, aus eigener Erfahrung XD
Ich hatte mich und andere schon dabei erweischt einfach alle Methoden statisch zu machen, weil dann der Compiler nicht mehr gemeckert hat ^^
Ich weiss nicht ob das hier auch der Fall ist, könnte aber sein. C ist ja nicht objektorientiert.*Edit
Auch gute Programmierer haben mir das gesagtDas nenn ich ne tolle Argumentation
Statische Methoden sind durchaus legitim und sollten dort verwendet werden, wo es nötig ist.
-
Klar haben statische Methoden ihren Platz. Ich habe ihn ja eigentlich nur fragen wollen, ob er alles statisch gemacht hat, weil er OO nicht kennt (ich hatte da nur so einen Verdacht, weil er von C gesprochen hat). Weil einfach immer alles statisch zu machen... das ist sicher falsch.
-
Um mal auf eine der ursprünglichen Fragen zurück zu kommen. Ne do-while -Schleife wie in C macht man wie in C nämlich mit do{...}while(bedingung);
-
danke, ich schau mir das Programm gleich nochmal an
-
kann mir jemand sagen, warum das (char) (column+x) so definiert ist?
also es wird dann vermutlich: zu A, B, C,...
warum steht da das (char) davor?char column = 'A'; for( int x = 0; x < brett[0].length; x++ ) { System.out.print( "| " ); System.out.print( (char)(column + x ) ); System.out.print( " " ); } System.out.println( "|" ); }
-
Das (char) casted (column + x) von int zu char. Wenn du den cast weglässt, so wird eine Zahl ausgegeben. Mit dem cast wird ein Zeichen ausgegeben. Die chars werden eigentlich als ints interpretiert. Kannst ja mal schauen was passiert, wenn du (char) weglässt.
Kannst auch das mal kurz testen:
public static void main(String[] args) { char c = 'A'; System.out.println( c ); System.out.println( (int) c ); }
Ausgabe:
A
65Du siehst also, dass chars eigentlich integer-Werte sind.