Was ist der Fehler bei meinem Programm?
Ich muss ein Sudoku Programm machen und soll prüfen ob sich in dem bereits ausgefüllten ein Fehler befindet. Reihe und Spalte funktionieren einwandfrei aber mit der 3x3 box habe ich Probleme
Wenn ein Fehler in einer Box entdeckt wird z.B an Reihe 8 Spalte 2 werden Fehlermeldungen für Reihe 7 Spalte 1, Reihe 7 Spalte 2 , … bis Reihe 9 Spalte 3 ausgegeben. Was könnte mein Fehler sein
3 Antworten
Versuche es so:
Zunächst die Schrittweite in dreier Blöcken
und in Folge dann andere Schrittweiten
die Box ist immer 3x3 also auch immer 9
for (int k = 0; k < sudoku.GetLength(0); k += 3) {
for (int l = 0; l < sudoku.GetLength(1); l += 3) {
bool[] box = new bool[9];
for (int m = k; m < k + 3; m++) {
for (int n = l; n < l + 3; n++) {
if (sudoku[m, n] != 0) {
if (box[sudoku[m, n] - 1]) {
MessageBox.Show($"Fehler in Box beginnend bei Reihe {k + 1} und Spalte {l + 1}");
} else {
box[sudoku[m, n] - 1] = true;
}
}
}
}
}
}
Wenn eine Zahl mehr als einmal vorkommt, so wird für jedes doppelte Vorkommen (also für jedes außer das erste) ein Fehler ausgegeben.
Zudem iterierst du über dieselbe Box mehrfach. Du gehst Feld für Feld durch und prüfst für jedes Feld die zugehörige Box.
Da du pro Box neun Felder hast, prüfst du ie Box also neun mal.
Lösung für letzteres Problem: Die äußeren For-Schleifen weglassen, stattdessen die inneren sinnvoll anpassen.
Wenn ich das richtig verstehe müßtest Du für deine Prüfung m und n nehmen, nicht k und l.
Ich verstehe aber nicht ganz, warum Du überhaupt vier verschachtelte for-Schleifen hast. Versuchst Du da Reihen, Spalten und Boxen gleichzeitige zu prüfen?