Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Zufallszahl generieren (https://www.delphipraxis.net/127163-zufallszahl-generieren.html)

nixalsverdruss 8. Jan 2009 17:10


Zufallszahl generieren
 
Hallo,
ich such schon seit ner Ewigkeit den Fehler in diesem Quellcode:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
zahl:integer;
begin
randomize;
zahl:=random(21);
Label1.Caption:= zahl;
end;

end.
Kann mir jemand helfen?
Danke schon mal im Voraus
nixalsverdruss

PS:Die Zeile mit dem Label wird rot...

Meflin 8. Jan 2009 17:11

Re: Zufallszahl generieren
 
Du weist einer String-Property einen Integer-Wert zu. Das geht in Delphi nicht (Typsicherheit)!!
Lösung: Typecasting -> IntToStr(zahl)

nixalsverdruss 8. Jan 2009 17:13

Re: Zufallszahl generieren
 
Ahso...klar!!!!!! Kann ja im Label nur String wiedergeben :wall: :wall: :wall:
Danke! Ich hätt noch Stunden gesucht...

Luckie 8. Jan 2009 17:13

Re: Zufallszahl generieren
 
Und bitte Randomize nur einmal aufrufen. Am besten beim Programmstart.


Zitat:

Zitat von nixalsverdruss
Ahso...klar!!!!!! Kann ja im Label nur String wiedergeben :wall: :wall: :wall:
Danke! Ich hätt noch Stunden gesucht...

Du hättest dir nur die Fehlermeldung druchlesen brauchen.

guidok 8. Jan 2009 17:15

Re: Zufallszahl generieren
 
Hast du mal auf das Ausgabefenster (bei Turbo Delphi ist das ganz unten) geachtet? Da steht doch im Klartext, was der Fehler ist.

Übrigens sollte man "Randomize" nur einmal, z.B. im OnCreate, aufrufen und nicht bei jedem ButtonClick.

Edit: zu spät...

alzaimar 8. Jan 2009 18:28

Re: Zufallszahl generieren
 
Zitat:

Zitat von Meflin
Lösung: Typecasting -> IntToStr(zahl)

Das ist kein Typecasting sondern eine Funktion, die eine Zahl in einen lesbaren String umwandelt. Mit Typecasting weisst man Delphi an, den durch die Variable belegten Speicherbereich als einen anderen Datentyp anzusehen. Das kann gutgehen, führt aber u.U. zu Abstürzen. Hier würde Typecasting gar nicht funktionieren bzw. komische Resultate erzeugen.

Meflin 8. Jan 2009 19:50

Re: Zufallszahl generieren
 
Natürlich ist IntToStr eine Variante expliziten Typecastings :shock:
Siehe dazu auch http://de.wikipedia.org/wiki/Typumwandlung :P

alzaimar 8. Jan 2009 20:07

Re: Zufallszahl generieren
 
Na ja. Ich bleibe bei meiner Interpretation eines expliziten Typecasting:
Delphi-Quellcode:
String(anInteger)
Das geht in C# ebensowenig gut, wie in Java. Auch der englische Artikel legt jedoch nicht eindeutig fest, ob eine Konvertierung, bzw. Interpretation einer Zahl als Zeichenkette (IntToStr(123)=> '123' ist nur eine mögliche Interpretation, eine andere wäre IntToStr(123)='Einhundertdreiundzwanzig') auch ein Typecasting ist. Zumal Wikipedia schreibt:
Zitat:

Eine explizite Typumwandlung bezeichnet man auch als type cast (aus dem Englischen).
In meinen Augen ist die Funktion 'IntToStr' keine Typecasting-Funktion, sondern zeigt eine mögliche textuelle Darstellung einer Zahl, aber das ist vielleicht Geschmacks- und Auslegungssache.

Uwe Raabe 8. Jan 2009 21:29

Re: Zufallszahl generieren
 
Sind das dann alles Explizite Type Casts?

var
s: string;
i: Integer;
begin
i := 12345;
s := IntToStr(i); // s = '12345';
s := IntToHex(i, 4); // s = '3039'
s := string(i); // EAccessViolation
end;

Warum kommt dann aber immer was anderes Raus?
Fällt dann die Funktion Format auch unter Type Casting?
Was ist dann der Unterschied zwischen Type Casting und Type Conversion?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:02 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