1

到目前为止,我已经设法使用 Random 生成随机数。

for(int i=0; i<10; i++){
    prevnum = num;
    num = random.nextInt(4);
    num = num==prevnum?ran.nextInt(4):num;
    System.out.println("random number: " + num);
}

我不想连续重复,我该怎么办?

编辑/解决方案:

我使用这个解决方法解决了这个问题。

通过检查它是否是第一次运行以避免空指针异常。

并且刚刚使用 ArrayList 通过从小池/范围中删除先前随机生成的数字来消除任何重复的机会。

public void printRandom(){
        for(int i=0; i<10; i++){
            if(firstrun){
                firstrun=false;
                num = random.nextInt(4);
                System.out.println(num);
            } else{
                num = getRandom(num);
                System.out.println(num);
            }
        }
    }

    int getRandom(int prevNum){
         ArrayList choices = new ArrayList(Arrays.asList(0, 1, 2, 3));
         choices.remove(prevNum);
         return (int) choices.get(random.nextInt(3));
    }
4

3 回答 3

1

你最好得到一个随机数,直到它与最后一个数字不同,而不仅仅是一次,换句话说,重复这个条件:

num = num==prevnum?ran.nextInt(4):num;

喜欢:

do {
    num = num==prevnum?ran.nextInt(4):num;
while (num != prevnum);

因为你的数字很少,它们可能是相同的,所以如果需要,请多次检查。

于 2020-03-20T08:05:21.283 回答
1

尝试这个

Random ran = new Random();
int cur, pre = ran.nextInt(4);
for (int i = 0; i < 10; i++) {
    cur = ran.nextInt(4);
    while (cur == pre) {
        cur = ran.nextInt(4);
    }
    pre = cur;
    System.out.println(cur);
}
于 2020-03-20T08:16:48.257 回答
0

如果您不想要连续重复,那么您总是希望两个连续数字之间的间隔不为零。您建议您正常选择第一个数字,然后从那时起选择一个随机但非零的差距。将前一个数字的差距加到下一个数字上,下一个数字总是不同的。

一些伪代码:

// First random number.
currentNum <- random(4);
print(currentNum);

// The rest of the random numbers.  
repeat
  gap <- 1 + random(3);
  currentNum <- (currentNum + gap) MOD 4;
  print(currentNum);
until enough numbers;
于 2020-03-20T09:07:18.727 回答