AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Gewollter Fehler

Ein Thema von Marcel2906 · begonnen am 23. Nov 2011 · letzter Beitrag vom 23. Nov 2011
Antwort Antwort
Marcel2906

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

Gewollter Fehler

  Alt 23. Nov 2011, 10: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 10:23 Uhr) Grund: Frage vergessen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.158 Beiträge
 
Delphi 12 Athens
 
#2

AW: Gewollter Fehler

  Alt 23. Nov 2011, 10:24
Ablaufsteuerung über Exceptions ist nunmal nicht die optimale Lösung.

Excetion = Ausnahme
standardmäßiger/vorhersehbarer Programmablauf = Normalfall


raise Exception.Create('wahr wohl nix');
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Gewollter Fehler

  Alt 23. Nov 2011, 10:26
Alternativ rufst du nach deinem ShowMessage ein Abort; auf. Dadurch wird eine stille Exception ausgelöst: Keine Meldung, aber die aktuelle Prozedur wird abgebrochen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz