如何防止随机数生成器重复数字?

时间:2013-10-26 00:41:57

标签: java random

如何防止随机数生成器重复数字?

以下是我的代码中生成随机数的部分:

String [] number = {"1","2","3","4","5","6"};
Random random = new Random();
int Select = random.nextInt(number.length);
System.out.println(number[Select]);

有时它重复数字,如“4”,然后再重复“4”。我希望它总是一个不同的数字。

6 个答案:

答案 0 :(得分:3)

我会这样做

class Generator {
    List<String> number = Arrays.asList("1", "2", "3", "4", "5", "6");
    int n = 0;

    Generator() {
        Collections.shuffle(number);
    }

    String next() {
        return number.get(n++);
    }

答案 1 :(得分:2)

对于这么小的一组数字(一个很容易适合记忆的数字),我会:

  1. 将数字复制到ArrayList<String>
  2. 使用Collections.shuffle随机化此列表
  3. 迭代列表的值

答案 2 :(得分:1)

这是我的解决方案.. 我使用ArrayList而不是常规数组,因为它是字符串..

import java.util.*;

class RandomWithoutRepeat {

    public static void main(String[] args) {
         ArrayList<String> number = new ArrayList<String>(
         Arrays.asList("1","2","3","4","5","6"));
         Random random = new Random();
         int size = number.size();
         int Select = random.nextInt(number.size());
         for(int i =0; i< size; i++)
         {
            Select = random.nextInt(number.size());
            System.out.println(number.get(Select));
            number.remove(Select);   
         }

    }
}

答案 3 :(得分:0)

一种简单的方法可以是:

store what values have already been generated in an array x
while new value is in the var x
    generate a new value again
use new value in the way you want

答案 4 :(得分:0)

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));
System.out.println(Arrays.toString(arr));

}

答案 5 :(得分:-1)

嗯,我不是100%的代码,但似乎你打印出一个数字的长度,而不是数字...为什么?你想阻止连续获得两个4位数字吗?好的,我明白了... nvm。

编辑:好的,所以这样做,以便每次运行循环时数组都会删除'select'变量(如果没有循环,则进行循环)。然后,这个数字不可能被选中。