繁体   English   中英

生成一个随机整数数组,其中每个元素与Java中的后继者和前任者不同

[英]Generate an Array of Random Integers in which Every Element is Different from its Successor and Predecessor in Java

我正在尝试编写Random()。nextInt()方法的替代版本,该方法不会连续两次生成相同的数字。 我在StackOverflow上搜索,但奇怪的是,我发现的方法只有在随机值的范围足够大时才能工作(如果我没有错,则大于4)。

更具体地说,我正在尝试生成6个随机整数k(0 <= k <= 3)的int [],其中每个元素与其后继元素和前任元素都不同。

非常感谢你。

可能的解决方案:生成下一个随机数后,将其与前一个随机数进行比较。 如果它们相同,则丢弃最后一个并生成一个新的。

这是我的快速伪代码版本

  1. 生成一个随机数
  2. 将该数字与之前的数字进行比较。
  3. 如果相同则重复步骤1和2。
  4. 如果是不同的存储号码。
  5. 返回号码

注意:确保没有一个只有一个整数的数字范围,否则你可能会陷入循环。

这样做当然有更好/不同的方式。

思考我在Python中做了些什么。 根据你想要的整数范围,例如1.100,创建一个整数的arraylist,然后随机访问列表并弹出/从列表中删除元素。 或者创建一个随机数的静态列表,然后转换为一个集以删除重复项,然后将nextInt()连接到集合。

我想出来了:

private ArrayList<Integer> MyRandom(int size, int k)
    {
        ArrayList<Integer> array = new ArrayList<Integer>();
        array.add(new Random().nextInt(k));
        while (array.size() <= size)
        {
            int val = new Random().nextInt(k);
            if (array.get(array.size() - 1) != val && (!(val == 1 && array.get(array.size() - 1) == 0)) && 
                    (!(val == 0 && array.get(array.size() - 1) == 1))) array.add(val);
        }
        return array;
    }
Random rand = new Random();
int last = rand.nextInt(3);
for(int i = 0; i < k; i++) {
last = (last +1 + rand.nextInt(2)) % 4
array.add(last)
}

优点:你真的只生成O(k)值...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM