Was ist der Fehler bei meinem Programm?

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?