Thema: Delphi Gewollter Fehler

Einzelnen Beitrag anzeigen

Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#1

Gewollter Fehler

  Alt 23. Nov 2011, 11:21
Delphi-Version: 2010
Ich weiß, der Titel hört sich schon mal Interesannt an

Erstma mein Code:

Delphi-Quellcode:
   Procedure Suchen(x, y: integer);
   Begin
      Save();
      //Suche Feld mit 2 Kandidaten
      If (aSudoku[x, y] > 10) And (aSudoku[x, y] < 100) Then Begin
         z := IntToStr(aSudoku[x, y]);
         aSudoku[x, y] := StrToInt(z[1]);
         Try
            BtEiKdnEtClick(BtEiKdnEt);
            BtSolveClick(BtSolve); //FEHLER WENN ZAHL DOPPELT!!!!!!
         Except
            aSudoku[x, y] := StrToInt(z[2]);
            BtEiKdnEtClick(BtEiKdnEt);
            BtSolveClick(BtSolve);
         End;
      End;
   End;
Dort wo mein KOmmentar "Fehler wenn zahl doppelt!!!" gibt es in dem BtSolveClick eine weitere funktion die mein Sudoku auf doppelte Zahlen prüft:

Delphi-Quellcode:
Procedure TForm2.BtPruefenClick(Sender: TObject);
Type
   THilfsArray = Array[1..9] Of Integer;
Var
   x, y, xx, yy: Integer;
   HilfsArray: THilfsArray;

   //HilfsArray erstellen
   Procedure HilfsArrayLeeren;
   Var
      i: Integer;
   Begin
      For I := 1 To 9 Do
         HilfsArray[i] := 0;
   End;

   //Wenn eine Zahl doppelt, result = true
   Function ZahlDoppelt: boolean;
   Var
      i: Integer;
   Begin
      For i := 1 To 9 Do Begin
         If HilfsArray[i] > 1 Then Begin
            Result := True;
            Exit; // Ergebnis steht fest
         End;
      End;
      Result := False;
   End;

   //Zahl zum Hilfsarray hinzufügen
   Procedure AddHilfsArray(z: Integer);
   Begin
      If (z > 0) And (z < 10) Then
         inc(HilfsArray[z]);
   End;

Begin
   //Zeile prüfen
   For y := 0 To 8 Do Begin
      HilfsArrayLeeren;
      For x := 0 To 8 Do
         AddHilfsArray(aSudoku[y, x]);
      If ZahlDoppelt Then
         ShowMessage(' Zahl in einer Zeile doppelt');
      break;
   End;
   //Spalte prüfen
   For x := 0 To 8 Do Begin
      HilfsArrayLeeren;
      For y := 0 To 8 Do
         AddHilfsArray(aSudoku[y, x]);
      If ZahlDoppelt Then
         ShowMessage('Zahl in einer Spalte doppelt');
      break;
   End;
   //Felder prüfen
   For xx := 0 To 2 Do
      For yy := 0 To 2 Do Begin
         HilfsArrayLeeren;
         For y := yy * 3 To yy * 3 + 2 Do Begin
            For x := xx * 3 To xx * 3 + 2 Do
               AddHilfsArray(aSudoku[y, x]);
         End;
         If ZahlDoppelt Then
            ShowMessage('Zahl in einem Feld doppelt');
         exit;
      End;
End;
Nun möchte ich, dass wenn ShowMessage(Zahl doppelt) gezeigt wird, es wie ein Fehler behandelt wird. Hab schon versucht selber einen einzubauen ( durch 0 teilen ect.) klappt aber alles nicht.
Ihr werdet bestimmt schimpfen man darf keine Fehler selber erzeugen...aber mir fällt nichts besseres ein

Doch wie schaff ich es, dass das Try abgebrochen wird wenn eine Zahl doppelt vorkommt?

Geändert von Marcel2906 (23. Nov 2011 um 11:23 Uhr) Grund: Frage vergessen
  Mit Zitat antworten Zitat