-2

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

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

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”。我希望它总是一个不同的数字。

4

6 回答 6

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++);
    }
于 2013-10-26T00:51:37.520 回答
2

对于这样一小组数字(可以轻松放入内存中的数字),我会:

  1. 将数字复制到ArrayList<String>,
  2. 用于Collections.shuffle随机化此列表
  3. 迭代列表的值
于 2013-10-26T00:51:23.823 回答
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);   
         }

    }
}
于 2013-10-26T03:27:18.877 回答
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
于 2013-10-26T00:49:08.343 回答
0

公共静态无效主要(字符串[]参数){

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));

}

于 2018-10-22T05:22:43.210 回答
-1

嗯,我不是 100% 了解您的代码,但似乎您正在打印数字的长度,而不是数字......为什么?您是否试图防止连续获得两个 4 位数字?好的,我明白了... nvm。

编辑:好的,所以让数组在每次循环运行时删除“选择”变量(如果你没有它,请创建一个循环)。那么,这个号码就不可能被选中了。

于 2013-10-26T00:47:00.460 回答