随机数生成器会产生重复的数字,为什么?

问题描述 投票:0回答:1

所以我为一个研究项目拼凑了一个随机数生成器。它的作用是生成一个随机数,然后根据第一个数字的值生成更多随机数。

到目前为止,它工作得很好,我唯一需要它停止做的事情就是生成相同的数字两次。

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 三次?

random abap
1个回答
7
投票

标准伪随机数生成器的设计看起来好像没有受到先前事件的影响。这意味着它偶尔会输出重复的数字。就像骰子有可能连续两次出现相同的数字一样。

如果你不想要重复的数字,那么你不应该掷骰子,你应该发牌。

我的意思是制作一个洗牌袋。

  1. 将所有可能的值放入内表中
    lt_shufflebag
  2. 通过生成 1 和
    lv_rand
    之间的随机数
    lines( lt_shufflebag )
    来绘制值,然后使用
    READ TABLE lt_shufflebag INDEX lv_rand
    获取该表行中的值
  3. 使用
    DELETE TABLE lt_shufflebag INDEX lv_rand
    删除该表格行以删除您刚刚读取的行(该行之后的行将向下移动,因此表格最终会少一行)。
  4. 不要忘记处理表为空的情况,因为您用完了所有条目。在这种情况下,您可能想重新生成表。
© www.soinside.com 2019 - 2024. All rights reserved.