![]() |
Problem mit if
Ich denke es ist ein if Befehl auf dem der Fehler liegt .. Ich poste mal den ganzen Code:
Delphi-Quellcode:
Ein altbekannter Fehler: '' ist kein gültiger Integerwert.
procedure TForm1.btnWuerfelnClick(Sender: TObject);
var ergebnis,ergebnis2, addieren2, tmp, tmp2 : integer; begin if Trim(edtAnzahl.Text) = '' then tmp := 0 else tmp := StrToInt(edtAnzahl.Text); if Trim(edtAnzahlBot.Text) = '' then tmp2 := 0 else tmp2 := StrToInt(edtAnzahlBot.Text); Addieren; ergebnis := tmp + Addieren; addieren2 := random(6)+1; ergebnis2 := tmp2 + addieren2 ; edtAnzahl.Text := IntToStr(ergebnis); edtAnzahlBot.Text := IntToStr(ergebnis2); if StrToInt(edtAnzahl.Text) >= 21 then ShowMessage('Du verlierst!'); NewGame; if StrToInt(edtAnzahlBot.Text) >= 21 then ShowMessage('Du gewinnst!'); NewGame; if (StrToInt(edtAnzahl.Text) >= 21) and (StrToInt(edtAnzahlBot.Text) >= 21) then ShowMessage('Draw!'); NewGame; end; function TForm1.Addieren : integer; begin Label1.Visible := False; Addieren := random(6)+1; end; procedure TForm1.btnExitClick(Sender: TObject); begin Close; end; procedure TForm1.NeuesSpiel1Click(Sender: TObject); begin NewGame; end; procedure TForm1.Beenden1Click(Sender: TObject); begin Close; end; procedure TForm1.Info1Click(Sender: TObject); begin Application.MessageBox('Coded by Drake', 'Information', MB_OK + MB_ICONINFORMATION + MB_TASKMODAL); end; procedure TForm1.NewGame; begin edtAnzahlBot.Text:= ''; edtAnzahl.Text := ''; Label1.Visible := True; end; end. Wenn ich nen BP auf den if setze kommt kein Fehler, aufm ShowMessage schon. Es geht um den mittleren if befehl.
Delphi-Quellcode:
if StrToInt(edtAnzahlBot.Text) >= 21 then
ShowMessage('Du gewinnst!'); NewGame; |
Re: Problem mit if
:shock:
eigne dir erstmal eine vernünftige Codeformatierung an, sonst wird das eh nichts. Desweiteren fehlen da diverse begin und end's bei den if-blöcken Was dein Problem betrifft: Offensichtlich ist im Edit kiene Zahl eingetragen |
Re: Problem mit if
Wie inherited schon sagt es fehlen etliche begin end, Du löschst mit NewGame alle Einträge und versuchst dann etwas zu prüfen was nicht da ist.
|
Re: Problem mit if
Huch, da hab ich wohl was übersehen. :O
Sry, bin noch bloody beginner ;D |
Re: Problem mit if
Hmm, ich bekomme zwar keine Fehlermeldung mehr, aber auch keine Zahlen mehr in dei Textfelder ...
Delphi-Quellcode:
procedure TForm1.btnWuerfelnClick(Sender: TObject);
var ergebnis,ergebnis2, addieren2, tmp, tmp2 : integer; begin if Trim(edtAnzahl.Text) = '' then tmp := 0 else tmp := StrToInt(edtAnzahl.Text); if Trim(edtAnzahlBot.Text) = '' then tmp2 := 0 else tmp2 := StrToInt(edtAnzahlBot.Text); Addieren; ergebnis := tmp + Addieren; addieren2 := random(6)+1; ergebnis2 := tmp2 + addieren2 ; edtAnzahl.Text := IntToStr(ergebnis); edtAnzahlBot.Text := IntToStr(ergebnis2); if StrToInt(edtAnzahl.Text) >= 21 then begin ShowMessage('Du verlierst!'); NewGame; end else if StrToInt(edtAnzahlBot.Text) >= 21 then begin ShowMessage('Du gewinnst!'); NewGame; end else begin if (StrToInt(edtAnzahl.Text) >= 21) and (StrToInt(edtAnzahlBot.Text) >= 21) then ShowMessage('Draw!'); NewGame; end; end; function TForm1.Addieren : integer; begin Label1.Visible := False; Addieren := random(6)+1; end; procedure TForm1.btnExitClick(Sender: TObject); begin Close; end; procedure TForm1.NeuesSpiel1Click(Sender: TObject); begin NewGame; end; procedure TForm1.Beenden1Click(Sender: TObject); begin Close; end; procedure TForm1.Info1Click(Sender: TObject); begin Application.MessageBox('Coded by Drake', 'Information', MB_OK + MB_ICONINFORMATION + MB_TASKMODAL); end; procedure TForm1.NewGame; begin edtAnzahlBot.Text:= ''; edtAnzahl.Text := ''; Label1.Visible := True; end; end. |
Re: Problem mit if
wundert dich das:
Delphi-Quellcode:
Wenn man diesen Code liest (das aber sehr schwer ist) wird immer als letzte Anweisung "NewGame" ausgegeben.
{...}
if StrToInt(edtAnzahlBot.Text) >= 21 then begin ShowMessage('Du gewinnst!'); NewGame; end else begin if (StrToInt(edtAnzahl.Text) >= 21) and (StrToInt(edtAnzahlBot.Text) >= 21) then ShowMessage('Draw!'); NewGame; end; end; Und dort leerst du deine Edits. Ändere mal deine Formatierung! Denn so hättest du es gesehen:
Delphi-Quellcode:
begin
{...} if StrToInt(edtAnzahlBot.Text) >= 21 then begin ShowMessage('Du gewinnst!'); NewGame; end else begin if (StrToInt(edtAnzahl.Text) >= 21) and (StrToInt(edtAnzahlBot.Text) >= 21) then ShowMessage('Draw!'); NewGame; //<--- Das wird immer ausgelöst, da die If-Abfrage drüber nicht für "NewGame" gilt (begin...end !!!) end; end; |
Re: Problem mit if
Oh, du hast recht .. Kann mir da vll. jmd. ne Lösung geben? Ich komm nichtmehr ganz damit klar ;D
|
Re: Problem mit if
Lösung: Formattier den Code mal ordentlich durch, dann passiert sowas nicht.
|
Re: Problem mit if
So, z. B., könnte so was aussehen.
Der Code würde auch funktionieren, wenn du ihn gegen deinen ersetzt. Nur bin ich mir nicht sicher, welche Delphi-Version du verwendest - deswegen kann es sein, dass bei alten Versionen < 7 (oder schon < 6??) bei StrToIntDef Probleme bekommen könntest. Schau dir einfach mal die Formatierung an und sag mir dann welche besser lesbar ist, deine oder meine. Ach ja - es wird dir auffallen, dass Kommentare verwendet wurden - die sind nie verkehrt!
Delphi-Quellcode:
var
ergebnis, ergebnis2, addieren2, tmp, tmp2 : integer; begin //Variablen initialisieren tmp := 0; tmp2 := 0; if not (Trim(edtAnzahl.Text) = '') then tmp := StrToInt(edtAnzahl.Text); if not (Trim(edtAnzahlBot.Text) = '') then tmp2 := StrToInt(edtAnzahlBot.Text); // Addieren; //<== unnötig, da es sich um eine function handelt //Achtung: Bei Random im OnCreate der Form "Randomize" nicht vergessen!! //Berechnungen ergebnis := tmp + Addieren; addieren2 := random(6) + 1; ergebnis2 := tmp2 + addieren2; //Ausgabe edtAnzahl.Text := IntToStr(ergebnis); edtAnzahlBot.Text := IntToStr(ergebnis2); //Prüfungen tmp := StrToIntDef(edtAnzahl.Text, 0); tmp2 := StrToIntDef(edtAnzahlBot.Text, 0); //StrToIntDef geben bei einer Exception den Defaultwert zurück, //hier 0 //"edtAnzahl" prüfen if tmp >= 21 then begin ShowMessage('Du verlierst!'); NewGame; end else //"edtAnzahlBot" prüfen if tmp2 >= 21 then begin ShowMessage('Du gewinnst!'); NewGame; end else //"editAnzahl" und "edtAnzahlBot" prüfen if (tmp >= 21) and (tmp2 >= 21) then begin ShowMessage('Draw!'); NewGame; end; |
Re: Problem mit if
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ja, dein Code funktioniert einwandfrei. Danke. //EDIT: Da ich am blitzen eurer Augen sehe das ihr das Ergebnis unbedingt sehen wollt, könnt ihr sie im Anhang downloaden. ;) |
Re: Problem mit if
Wie du bestimmt siehst, ist mein Code der gleiche wie deiner (keine Änderungen in der Funktion ausser die letzte If-Abfrage)
Das Einzigste was sich geändert hat, ist die Formatierung. Und ich hoffe dass dir dieses Beispiel gezeigt hat, dass eine gute Formatierung unumgänglich ist. Vor allem bei der Fehlersuche. |
Re: Problem mit if
Einige if's sind da sicher falsch.
Wieso gewinnt der, der weniger als 21 hat, sobald irgendeiner 21 oder mehr hat? Wieso verliert man bei Punktegleichstand. Ich denk, da ist noch zu feilen :zwinker: |
Re: Problem mit if
Es stimmt alles .. Es ist ein BlackJack mit würfeln .. Über 21 = verloren und da scih beide gleichzeitig erhöhren --> beide 21+ --> Draw
|
Re: Problem mit if
So hab ichs mir auch gedacht, aber hat der Gegner 21 und ich 16 gewinne ich. vice versa. Bei Übertretung gewinnt auch der falsche und Draw ist irgendwie nich drin.
|
Re: Problem mit if
Oh, natürlich, ich muss es von 21 auf 22 umstellen bzw. den Operator ändern .. Dankeschön ;D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 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-2025 by Thomas Breitkreuz