仅生成一次随机数

时间:2017-09-25 23:50:49

标签: java android

我有一个方法可以随机化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;
}

但是,随着时间的推移,随机数显示为新的,并且这个数字会在生成器数组中重复添加。

1 个答案:

答案 0 :(得分:1)

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