![]() |
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. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 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