[Delphi;Win95] - Zufallszahl immer 0

Von: , Frage gestellt am Sa, 1. Apr 2000

Hallo, ich versuche für die Schule ein Zahlenspiel zu programmieren, aber ich erhalte als Zufallszahl immer 0.
Und zwar sieht das Script wie folgt aus:

procedure rand;
begin
randomize;
Zahl1:=random(100)+1;
end;

Zahl1 eins ist als Integer definiert. In meinem Spiel geht es darum eine Zahl zwischen 1 und 100 zu erraten aber ich brauch blos null einzugeben und habe schon die richtige zahl.
Woran kann das liegen?

7 Antworten zu dieser Frage

  1. Antwort von nach 8 Stunden hilfreich
    Re: [Delphi;Win95] - Zufallszahl immer 0

    Zeig mal den ganzen Source...

    • Antwort von nach 11 Stunden hilfreich
      Re^2: [Delphi;Win95] - Zufallszahl immer 0

      Zeig mal den ganzen Source...
      Here u Are
      ________________________________________
      unit Zahlenraten;

      interface

      uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;

      type
      TForm1 = class(TForm)
      Edit1: TEdit;
      Button1: TButton;
      procedure Button1Click(Sender: TObject);
      private
      { Private-Deklarationen }
      public
      { Public-Deklarationen }
      end;

      var
      Form1: TForm1;
      Zahl1: Integer;
      Input: String;
      implementation

      {$R *.DFM}

      procedure rand;

      begin
      randomize;
      Zahl1:=random(10)+1;
      end;
      procedure TForm1.Button1Click(Sender: TObject);
      begin
      Input:=Edit1.Text;
      if Zahl1>strtoint(input) then showmessage('zu klein')
      else if Zahl1<strtoint(input) then showmessage('zu groß')
      else showmessage('joho')
      end;
      _________________________________________

      • Antwort von nach 12 Stunden hilfreich
        Re^3: [Delphi;Win95] - Zufallszahl immer 0

        Und wann rufst Du rand dann auf?

        • Antwort von nach 20 Stunden hilfreich
          Re^4: [Delphi;Win95] - Zufallszahl immer 0

          Und wann rufst Du rand dann auf?
          Wie muß ich das denn wo tun?
          ich bin totaler neuling. ist für die Schule.

          • Antwort von nach 21 Stunden hilfreich
            Re^5: [Delphi;Win95] - Zufallszahl immer 0

            Du musst die Prozedure rand, die Du geschrieben hast ja irgendwo aufrufen. Am Besten Du loescht diese Prozedure rand und dann nimmst Du das Ereignis OnCreate der Form und schreibst diese zwei Zeilen da rein.
            Ausserdem sollte man in der OOP (Objekt Orientierten Programmierung) moeglichst wenig globalen Variablen deklarieren. Form1, Zahl1, Input sind solche globalen Variablen. Das mit der Form1 ist ok, weil das Delphi das automatisch macht, die anderen aber nicht.
            Da Input nur in der Click-Eigenschaft verwendet wird, sollte das eine lokale Variable im Click-Unterprogramm sein und Zahl1 wird im ganzen Objekt benoetigt und sollte deswegen in der Private-Deklaration von TForm1 drinnenstehen. Hier der Code (Du kannst den Code nicht einfach bei Dir im Delphi reinkopieren, Du musst auch noch die OnCreate-Eigenschaft der Form und die OnClick-Eigenschaft vom Button im Objektinspektor setzten, am sichersten ist, wenn Du alles selber schreibst).

            type
            TForm1 = class(TForm)
            Button1: TButton;
            Edit1: TEdit;
            procedure FormCreate(Sender: TObject);
            procedure Button1Click(Sender: TObject);
            private
            Zahl1:Integer;
            public
            { Public-Deklarationen }
            end;
            var
            Form1: TForm1;
            implementation
            {$R *.DFM}
            procedure TForm1.FormCreate(Sender: TObject);
            begin
            randomize;
            Zahl1:=random(10);
            end;
            procedure TForm1.Button1Click(Sender: TObject);
            var
            Input:string;
            begin
            Input:=Edit1.Text;
            if Zahl1>strtoint(input) then showmessage('zu klein')
            else if Zahl1<strtoint(input) then showmessage('zu groß')
            else showmessage('joho')
            end;
            


            Wenn Du den Code, den Du hast moeglichst beibehalten willst, dann musst Du nur vor dem end. ganz am Ende des Sources hinschreiben:

            begin
            rand;
            end.
            

            • Antwort von nach einem Tag hilfreich
              Re^6: [Delphi;Win95] - Zufallszahl immer 0

              Dank dir, alles workt.

  2. Antwort von nach 10 Stunden hilfreich
    Re: [Delphi;Win95] - Zufallszahl immer 0

    procedure rand;
    begin
    randomize;
    Zahl1:=random(100)+1;
    end;

    Zahl1 eins ist als Integer definiert.
    Hi Zero,

    der Code ist völlig OK, d. h. Zahl1 hat beim Verlassen der Prozedur einen zufälligen Wert zwischen 1 und 100. Das kannst Du auch leicht sebst überprüfen, indem Du folgendes tust:

    1. ein Label-Control irgendwo ins Formular setzen,
    2. eine Stringvariable s deklarieren ("VAR s: STRING" vor das "begin" schreiben),
    3. nach der "Zahl1 := ..."-Anweisung die Zeilen "Str(Zahl1,s)" und danach "LabelXX.Caption := s" einfügen.

    Das Label-Control zeigt Dir dann bei jedem Run den Wert der Zahl1 an. Ich mach das oft, wenn ich eine Variable überprüfen will, ohne gleich den Debugger zu bemühen und einen Haltepunkt zu setzen.

    Ach ja: Wenn Zahl1 bei Dir immer Null ist, dann läuft irgendwo sonst was schief in Deinem Code.

    Gruß
    Martin

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!