我有一种方法可以随机分配1到5之间的数字。
当所有5个数字也都排序时,该方法需要停止(现在不这样做)

我的实际代码是:
public ArrayList<String> generated = new ArrayList<String>();在顶部

方法本身是:

public int RandomizeQuestion () {
    // Question numbers
    final int min = 1;
    final int max = 5;

    Random r = new Random();
    int qran = r.nextInt((max - min) + 1) + min;

    if (Collections.singletonList(generated).contains(qran)) {
        RandomizeQuestion();
    } else {
        generated.add(String.valueOf(qran));
    }

    return qran;
}


但是,这种情况总是在随机数一直显示为新数,并且此数反复在生成器数组中添加的情况下发生。

最佳答案

Collections.singletonList(generated)返回一个包含List<ArrayList<String>>作为其唯一元素的generated。显然,它将不包含qran。另外,在尝试添加新项目之前,您无需检查列表是否为预期的长度。这样的事情应该起作用:

if (generated.size() < max - min + 1) {
    if (generated.contains(String.valueOf(qran))) {
        RandomizeQuestion();
    } else {
        generated.add(String.valueOf(qran));
    }
}


但是,这是一种改组值序列的更简单,更有效的方法:

// generate a list of values between min and max
generated = IntStream.rangeClosed(min, max)
        .map(String::valueOf)
        .collect(Collectors.toCollection(ArrayList::new));

// shuffle them
Collections.shuffle(generated);

10-07 18:54