Hallo Leute,
ich muss für eine Aufgabe mit Hilfe von 2D Arrays das Sudoku Spiel nachbauen.
Ich habe schon etwas programmiert jedoch wird bei meiner Konsole alles untereinander ausgegeben ,also nur 1 Spalte.
Wie kann es so programmieren, dass auf der Konsole auch die Spalten nach rechts angezeigt werden?
System.out.println macht immer einen Zeilenumbruch (print-Line). System.out.print macht keinen, das ist das was du eher brauchst (und dann am Ende jeder Zeile einmal System.out.println verwenden)
Ich versuche nun wie im Bild die " | " hinzuzufügen jedoch wird dieser neben jeder Zahl eingefügt.
Wie könnte ich dieses Problem lösen?
Zudem soll ich aus jedem leeren Array also mit den Werten 0 , so einstellen ,dass " . " ausgegeben wird.
Jedoch ist/soll mein Array ja vom Typ Int sein diesen muss ich nun in String umwandeln (hab ich mit Integer.toString(zweidimarray [j]); versucht, oder gibt es noch eine andere Möglichkeit?
Ich versuche nun wie im Bild die " | " hinzuzufügen jedoch wird dieser neben jeder Zahl eingefügt.
Wie könnte ich dieses Problem lösen?
Zudem soll ich aus jedem leeren Array also mit den Werten 0 , so einstellen ,dass " . " ausgegeben wird.
Jedoch ist/soll mein Array ja vom Typ Int sein diesen muss ich nun in String umwandeln (hab ich mit Integer.toString(zweidimarray [j]); versucht, oder gibt es noch eine andere Möglichkeit?
Die | willst du ja nur am Anfang und dann nach jeder dritten Spalte ausgeben. Dafür bietet sich der Modulo-Operator (%) an.
Java:
if(index %3==0){System.out.print("|");}
Beim umwandeln muss du etwas kreativer werden. Da brauchst du eine Abfrage der Form Wenn wert == 0, dann gibt "." aus, ansonsten gib (wie bisher) einfach den Wert aus.
Danke dir!
Ich habe jetzt das mit der Umwandlung zu Punkten geschafft jedoch werden mir immer noch "|" überall angezeigt. Ich sehe momentan nicht meinen Denkfehler
Vielen Dank für eure Antworten.
Were das mit den Code-Tags jetzt auch so handhaben.
Ich habe es auch mit Index versucht jedoch kommt dann die Fehlermeldung index cannot be resolved to a variable
Index-Variable nennt man die Variable, die beim Zugriff auf das Array in den eckigen Klammern steht. Die enthält den Arrayindex, auf den man zugreifen möchte.
Ok super jetzt habe ichs ^^
Und nun brauche ich ja die waagrechten " -------"
Muss ich um diese zu erzeugen auf den index i zugreifen? Habe es so versucht jedoch kommt es dann ganz komisch raus, die senkrechten Striche funktionieren jedoch mit dem index [ j ] if ( j % 3 == 0) { System.out.print("| "); }
else if (i % 4 == 0) { System.out.print("----------"); }
Du hast zwei for-Schleifen. Die senkrechten Striche musst du in die for-Schleife einbauen, in der du über die Spalten iterierst, die waagerechten Striche musst du dagegen (nur) in die for-Schleife einbauen, die über die Zeilen iteriert.
So als Tipp nebenbei. Es kann sinnvoll sein, anstatt der Variablennamen i und j bessere Bezeichner zu verwenden, z.B. "zeile", "spalte". Das lässt sich leichter lesen und vermeidet Fehler.
Vielen Dank an euch jetzt hat es endlich geklappt.
Meine nächste Hürde ist jetzt vordefinierte Zahlen mit den Punkten zu ersetzen. Dies habe ich gemacht jedoch bekomme ich kein Leerzeichen nach der eingegeben Zahl hin
[CODE lang="java" title="Definierte Zahl eintragen"]zweidimArray[1][0] = 2;
if (zweidimArray[1][0] != 0) {
Und dann muss ich die Methode static void insert(int x, int y, int zahl) erstellen und das Programm so definieren:
Jetzt muss ich irgendwie wenn ich x & y sozusagen eintippe diese Werte in int zahl einsetzen und dann überprüfen ob der Bereich bei 1-9 liegt und wenn ja dies dann auf das Sudoku Spiel übertragen
[CODE lang="java" title="static void insert(int x, int y, int zahl)"] static void insert(int x, int y, int zahl) {
/**
* Wenn x-te Zeile und y-Spalte leer dann Wert mit int zahl übergeben x-Zeile und
* y-Spalte dürfen nur im Bereich 1-9 liegen. Wenn nicht alle Werte gültig ||
* wenn Feld != 0 dann macht die Methode nichts.
*/
if (x == 0) {
zahl = In.readInt();
if (x <= 9 && x >= 1) {
System.out.print(zweidimArray[zahl]);
}
}
if (y == 0) {
zahl = In.readInt();
if (y <= 9 && y >= 1) {
System.out.print(zweidimArray[x][y]);
}
}[/CODE]
Also was schon mal gar nicht geht, ist das readInt() innerhalb der Methode insert(). Alles was die Methode braucht, bekommt sie als Parameter übergeben. Da muss nichts mehr eingelesen werden. Das ist nicht die Aufgabe der Methode!
Das gilt auch für die Ausgabe innerhalb der Methode. Die gehört da auch nicht hin.
Einzige Aufgabe der Methode ist es die übergebene zahl zu prüfen, ob sie gültig an der durch x,y definierten Stelle eingesetzt werden kann und diese dann in das Array zu schreiben.
Für das andere Problem zeig mal den gesamten Code zur Darstellung des Sudoku.
Vielen Dank. D.h ich muss im main Bereich für int x und int y die In.readInt() einlesen und die Grenzwerte 1-9 festsetzen und diese beiden zahlen in int zahl speichern, dann in der insert() Methode bekomme ich wieder int zahl und überprüfe ob an der Stelle 1. die Werte gültig sind und ob das Feld leer ist?
[CODE lang="java" title="Sudoku Code"]
public class Sudoku {
static int[][] zweidimArray = new int[9][9];
public static void main(String[] args) {
showSudoku();
}
static void showSudoku() {
/*
* Sudoku Ausgabe wie im Bild. 3x3 Quadrate durch Begrenzungen sichtbar machen.
* D.h immer bei Zeile 1-9 und Spalte 1,3,6 und 9 kommt ein | Leere Felder
* sollen mit einem Punkt dargestellt werden.
*/
System.out.print("-----------------------");
// Index zugreifen mit Modulo-Operator
if (j % 3 == 0) {
System.out.print("| ");
}
if (zweidimArray[j] == 0) {
System.out.print(". ");
} else {
System.out.print(zweidimArray[j]);
}
}
if (i % 3 == 2) {
System.out.println("");
System.out.print("-----------------------");
}
}
}
static void insert(int x, int y, int zahl) {
/**
* Wenn x-te Zeile und y-Spalte leer dann Wert mit zahl übergeben x-Zeile und
* y-Spalte dürfen nur im Bereich 1-9 liegen. Wenn nicht alle Werte gültig ||
* wenn Feld != 0 dann macht die Methode nichts. for (int x = 0; x <
* zweidimArray.length; x++) { System.out.println(); for (int y = 0; y <
* zweidimArray.length; y++) {
*
*
*/
if (x == 0) {
zahl = In.readInt();
if (x <= 9 && x >= 1) {
System.out.print(zweidimArray[zahl]);
}
}
if (y == 0) {
zahl = In.readInt();
if (y <= 9 && y >= 1) {
System.out.print(zweidimArray[x][y]);
}
}
/*
* for (x = 0; x < zweidimArray.length; x++) { x = In.readInt();
* System.out.println(); for (y = 0; y < zweidimArray[x].length; y++) { } }
*/
int x =In.readInt("Gebe die X-Position ein: ");int y =In.readInt("Gebe die Y-Position ein: ");int zahl =In.readInt("Gebe die Zahl ein: ");insert(x,y,zahl);// die drei Variablen werden als Parameter an die Methode übergeben
Wenn ihr diese Aufgabe mit Methoden und Parametern bekommen habt, dann müsstest du das doch auch mal beigebracht bekommen haben, wie das grundsätzlich funktioniert. Privat? Schule? Studium?