提问人:JaggermanJanssen 提问时间:11/16/2023 最后编辑:Sandra RossiJaggermanJanssen 更新时间:11/17/2023 访问量:46
如何阻止随机数生成器在 ABAP 中生成重复数
How to stop a random number generator from generating duplicate numbers in ABAP
问:
因此,我为一个研究项目拼凑了一个随机数生成器。它的作用是生成一个随机数,然后根据第一个数字的值生成更多的随机数。
到目前为止,它工作正常,我唯一需要它停止做的事情就是两次生成相同的数字。
DATA :
lv_MinI TYPE i VALUE 2,
lv_MaxI TYPE i VALUE 6,
lv_RndI TYPE i,
lv_RndII TYPE i,
lv_i TYPE i VALUE 10.
DO 1 TIMES.
CALL FUNCTION 'QF05_RANDOM_INTEGER'
EXPORTING
ran_int_max = lv_MaxI
ran_int_min = lv_MinI
IMPORTING
ran_int = lv_RndI.
WRITE: / lv_RndI.
ULINE.
DO lv_RndI TIMES.
CALL FUNCTION 'QF05_RANDOM_INTEGER'
EXPORTING
ran_int_max = lv_MaxI
ran_int_min = lv_MinI
IMPORTING
ran_int = lv_RndII.
WRITE: / lv_RndII.
ENDDO.
ENDDO.
输出如下:
5
4
6
4
3
4
我将如何停止生成数字 4 三次?
答:
6赞
Philipp
11/16/2023
#1
标准的伪随机数生成器被设计为看起来好像它没有受到先前事件的影响。这意味着它偶尔会输出重复的数字。就像骰子可以连续两次出现相同的数字一样。
如果你不想要重复的数字,那么你不应该掷骰子,你应该发牌。
我的意思是建立一个洗牌袋。
- 将所有可能的值放入内部表中
lt_shufflebag
- 通过生成一个介于 1 和 之间的随机数,然后用于获取该表行中的值来绘制值
lv_rand
lines( lt_shufflebag )
READ TABLE lt_shufflebag INDEX lv_rand
- 删除该表行以删除您刚刚读取的行(该行之后的行将向下移动,因此该表最终少了一行)。
DELETE TABLE lt_shufflebag INDEX lv_rand
- 不要忘记处理表为空的情况,因为您用完了所有条目。在这种情况下,您可能希望重新生成表。
评论
0赞
phil soady
11/20/2023
加上 1 用于免费概率课程和首选库。
评论
cl_abap_random