【问题标题】:How to generate not repeating random numbers [duplicate]如何生成不重复的随机数[重复]
【发布时间】:2016-04-28 09:19:40
【问题描述】:

我使用的是随机数,并且生成的是 0 到 7 之间的随机数。但是有一个问题:随机数有时会重复之前的数字。
我在单击按钮时生成一个随机数;所以点击按钮时,有时我真的会得到一个不同的随机数,但有时它会开始重复数字。举个例子:

在按钮点击时,有时数字会在 0-7 的范围内重复,例如:

1-3-4-3-6-3-5-5
如您所见,3 重复了多次,而 5 也一起出现了两次。

所以,有两种不同类型的重复。我已经写了下面的代码,它应该杀死第二次重复(5的重复):

int randomNumber;
do {
    randomNumber = random.nextInt(7 - 0 + 1) + 0;
} while (randomNumber == lastRandomNumber);
lastRandomNumber = randomNumber;
Log.d("RandomNumber","= "+randomNumber);
return randomNumber;

现在我想要什么:

它正在跟踪最后一个随机数,但现在我想跟踪所有以前生成的随机数。但我该怎么做呢?实现这一目标的最佳方法是什么?请指导我或分享一些代码。

【问题讨论】:

    标签: java android


    【解决方案1】:
    Integer[] arr = {...};
    Collections.shuffle(Arrays.asList(arr));
    

    例如:

    List<Integer> ran_num;
          public static void main(String[] args) {
                Integer[] arr = new Integer[1000];
                for (int i = 0; i < arr.length; i++) {
                    arr[i] = i;
                }
                Collections.shuffle(Arrays.asList(arr));
    
                ran_num=new ArrayList<Integer>(Arrays.toString(arr));
    
            }
    

    abvoe 代码可在以下位置找到 :Java generating non-repeating random numbers

    从生成的列表中取出一个数字,然后将其删除。 下次从同一个列表中获取一个数字。

    现在,如果您希望每次都获取新号码,请创建一个额外的方法:

    public static int fetch(){
    
       int num=ran_num.get(0);
        ran_num.remove(0);
    
    if(ran_num.size()==0)
    // call some method to regenerate the list as explained in above code
    
    return num;
    }
    

    【讨论】:

    • 这是什么以及如何使用?
    • 这是另一种获取随机数的方法,但我相信这不是你想要的。
    • @dquijada 这正是他想要的
    • 但是,如果有人知道最后 6 个值,它就会知道第 7 个数字。只是强调事实。顺便说一句,很好地使用 Shuffle 。
    • @Panther 一个可能的解决方案是在使用 80%-90% 的元素时重新生成列表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2012-01-23
    相关资源
    最近更新 更多