在Java中生成范围内的非重复随机数

ash*_*.gd 5 java random non-repetitive

我想生成1到4,4范围内的随机数,包括.
这是我的代码:

int num = r.nextInt(4) + 1;  //r is instance of Random.
Run Code Online (Sandbox Code Playgroud)

但是,我在循环中运行上面的代码,不想重复随机数.现在发生的事情通常是我得到的:
1,1,1,2,3,1,4,2,2,1,4,2,4,4,2,1,4,3,3,1,4,2,4,1作为我的输出.

这里,虽然数字在范围(1-4)内是随机的,但是经常像前3次迭代中的数字"1"那样重复.

我正在寻找的是一种在循环中获得非重复随机数的方法.我知道的一个简单方法是在当前迭代之前保留最后一个随机数并进行比较,但我相信必须有更好的解决方案.
提前致谢.

Mar*_*nik 7

使用random.nextInt(range-1)然后使用排除前一个数字的函数将该数字映射到输出数字:

public class Test {
  private final Random random = new Random();
  private final int range;
  private int previous;

  Test(int range) { this.range = range; }

  int nextRnd() {
    if (previous == 0) return previous = random.nextInt(range) + 1;
    final int rnd = random.nextInt(range-1) + 1;
    return previous = (rnd < previous? rnd : rnd + 1);
  }


  public static void main(String[] args) {
    final Test t = new Test(4);
    for (int i = 0; i < 100; i++) System.out.println(t.nextRnd());
  }
}
Run Code Online (Sandbox Code Playgroud)