如何阻止随机数生成器在ABAP中生成重复的数字

1 random 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.
Run Code Online (Sandbox Code Playgroud)

这是输出:

5
4
6
4
3
4
Run Code Online (Sandbox Code Playgroud)

我怎样才能停止生成数字 4 三次?

Phi*_*ipp 6

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

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

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

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