![]() |
Delphi-Version: 2010
Gewollter Fehler
Ich weiß, der Titel hört sich schon mal Interesannt an :-P
Erstma mein Code:
Delphi-Quellcode:
Dort wo mein KOmmentar "Fehler wenn zahl doppelt!!!" gibt es in dem BtSolveClick eine weitere funktion die mein Sudoku auf doppelte Zahlen prüft:
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;
Delphi-Quellcode:
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.
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; Ihr werdet bestimmt schimpfen man darf keine Fehler selber erzeugen...aber mir fällt nichts besseres ein :lol: Doch wie schaff ich es, dass das Try abgebrochen wird wenn eine Zahl doppelt vorkommt? |
AW: Gewollter Fehler
Ablaufsteuerung über Exceptions ist nunmal nicht die optimale Lösung.
Excetion = Ausnahme standardmäßiger/vorhersehbarer Programmablauf = Normalfall
Delphi-Quellcode:
raise Exception.Create('wahr wohl nix');
|
AW: Gewollter Fehler
Alternativ rufst du nach deinem ShowMessage ein
Delphi-Quellcode:
auf. Dadurch wird eine stille Exception ausgelöst: Keine Meldung, aber die aktuelle Prozedur wird abgebrochen
Abort;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz