gelöst Zufallszahlen


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

gelöst Zufallszahlen

Beitragvon Abapsocke » 17.05.2018, 14:00

Ich möchte Zufallszahlen erstellen und suche dafür eine Möglichkeit in ABAP. Die entsprechenden Funktionsbausteine sind bei mir nicht vorhanden. Daher kann ich sie nicht nutzen.
Zudem brauche ich zahlen im Bereich von 1-100 etwa. (die meisten eher 1-10 oder 1-20)

Wie kann ich das in ABAP bewerkstelligen?
Ich habe im Netz ein paar vorschläge gefunden die sich leider auf die fehlenden Fubas beziehen.
Abapsocke
ForumUser
 
Beiträge: 14
Registriert: 17.04.2018, 15:34
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Zufallszahlen

Beitragvon lausek » 17.05.2018, 14:21

Hast du es schon mit cl_abap_random versucht?

Code: Alles auswählen
" min und max müssen nicht zwingend Konstanten sein
  CONSTANTS:
    c_min TYPE i VALUE 1,
    c_max TYPE i VALUE 100.

" Random Generator erzeugen - Uhrzeit als seed, da sonst immer das Gleiche rauskommt!
  DATA(o_random) = cl_abap_random=>create( CONV i( sy-uzeit ) ).

" float( ) gibt eine Gleitkommazahl zwischen 0 und 1 zurück
" Diese Formel ist eine beliebte Programmierübung
  w_num = CONV i( c_min + o_random->float( ) * ( c_max - 1 ) ).
 
lausek
ForumUser
 
Beiträge: 45
Registriert: 23.03.2017, 07:54
Dank erhalten: 13 mal
Ich bin: Student/in

Re: Zufallszahlen

Beitragvon a-dead-trousers » 17.05.2018, 14:26

Klasse CL_ABAP_RANDOM

EDIT: Zu spät :oops:
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 2867
Registriert: 07.02.2011, 13:40
Dank erhalten: 691 mal
Ich bin: Entwickler/in

Re: Zufallszahlen

Beitragvon Abapsocke » 17.05.2018, 14:44

da hängt er sich bei mir an DATA auf.
btw:
Mit Klassen habe ich bei ABAP noch nicht geantwortet. Ist dabei etwas besonders zu beachten?
Abapsocke
ForumUser
 
Beiträge: 14
Registriert: 17.04.2018, 15:34
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Zufallszahlen

Beitragvon schick » 17.05.2018, 14:47

Vermutlich hast du ein Release älter 7.4, dann geht die inline Deklaration nicht.

Statt
Code: Alles auswählen
DATA(o_random) = cl_abap_random=>create( CONV i( sy-uzeit ) ).


müsstest du dann mit
Code: Alles auswählen
o_random = cl_abap_random=>create( CONV i( sy-uzeit ) ).

arbeiten und das Feld o_random vorher mit DATA deklarieren.
schick
ForumUser
 
Beiträge: 16
Registriert: 16.02.2018, 08:22
Dank erhalten: 1 mal
Ich bin: Berater/in

Beitragvon lausek » 17.05.2018, 14:52

Ich kann mir nichts vorstellen was an Klassen besonders sein soll. Darauf kommen wir dann zurück wenn du ein spezifisches Problem hast ^^


Das wäre jetzt auch kompatibel zu älteren Versionen:
Code: Alles auswählen
  DATA:
        o_random TYPE REF TO cl_abap_random,
        w_num    TYPE i.

  w_num = sy-uzeit.
  o_random = cl_abap_random=>create( w_num ).

"...
  w_num = c_min + o_random->FLOAT( ) * ( c_max - 1 ).
 
lausek
ForumUser
 
Beiträge: 45
Registriert: 23.03.2017, 07:54
Dank erhalten: 13 mal
Ich bin: Student/in

Re: Zufallszahlen

Beitragvon Abapsocke » 17.05.2018, 14:54

als was müsste in dem Fall das Feld o_random deklariert werden.

Ich habe jetzt einfach mal Type sy-uzeit verwendet.

Nun bekomme ich den Fehler :
Abapsocke
ForumUser
 
Beiträge: 14
Registriert: 17.04.2018, 15:34
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re:

Beitragvon Abapsocke » 17.05.2018, 14:57

lausek hat geschrieben:Ich kann mir nichts vorstellen was an Klassen besonders sein soll. Darauf kommen wir dann zurück wenn du ein spezifisches Problem hast ^^


Das wäre jetzt auch kompatibel zu älteren Versionen:
Code: Alles auswählen
  DATA:
        o_random TYPE REF TO cl_abap_random,
        w_num    TYPE i.

  w_num = sy-uzeit.
  o_random = cl_abap_random=>create( w_num ).

"...
  w_num = c_min + o_random->FLOAT( ) * ( c_max - 1 ).
 



das wars, danke.
Abapsocke
ForumUser
 
Beiträge: 14
Registriert: 17.04.2018, 15:34
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Zufallszahlen

Beitragvon black_adept » 17.05.2018, 15:22

Aber warum verwendest du CL_ABAP_RANDOM->FLOAT wenn du scheinbar eine zufällige Integerzahl haben willst? Dafür gibt es doch CL_ABAP_RANDOM_INT oder die Methode INTINRANGE in der Klasse CL_ABAP_RANDOM
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de
black_adept
Top Expert
 
Beiträge: 2914
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 475 mal
Ich bin: Freiberufler/in

Re: Zufallszahlen

Beitragvon black_adept » 17.05.2018, 15:40

Und noch ein Nachtrag: Wenn das eine Programmierübung sein sollte um gleichmäßig verteilte Zahlen von c_min bis c_max zu erhalten stimmt das auch nicht, falls zwischen c_min und c_max noch weitere Zahlen liegen.
Wenn c_min z.B. 1 ist und c_max 10 ist dann sollten ja eigentlich alle Zahlen von 1-10 ca gleich oft auftauchen - aber bei deiner Implementierung bekommen die Zahlen 1 und 10 jeweils 1/18 aller Zahlen und die Zahlen 2-9 jeweils 1/9.
Einfach mal einen Loop bauen und das System zählen lassen....
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de
black_adept
Top Expert
 
Beiträge: 2914
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 475 mal
Ich bin: Freiberufler/in


Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
Problem mit Select-Anweisung
Gestern von Crashday2707 2 Antw.
Drag&Drop not possible in SE80 (layout)
vor 2 Tagen von HH_ABAP 0 Antw.
Aus- oder Einblenden der Dynprofelder für bestimme Users
vor 3 Tagen von Wann 4 Antw.
gelöst Zufallszahlen
vor 3 Tagen von black_adept 9 Antw.
Customzing Standard-View V_024 austauschen
vor 3 Tagen von Brock! 0 Antw.

  Ähnliche Beiträge beta
Keine Beiträge gefunden - versuche es mit der erweiterten Suche.

 

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]