如何使用随机类在数组列表中找不到选择号?

时间:2018-10-25 14:26:00

标签: java android arraylist

我有一个包含数字的数组列表

例如

ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(54);
        numbers.add(11);
        numbers.add(6);
        numbers.add(8);
        numbers.add(32);

我想选择使用随机类在数组列表中找不到的新数字

我的尝试

ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(54);
        numbers.add(11);
        numbers.add(6);
        numbers.add(8);
        numbers.add(32);
        randomQuestion = new Random().nextInt(numbers.size());
        for (int i : numbers) {
            if (i == randomQuestion) {
                randomQuestion = new Random().nextInt(numbers.size());
            }else{
                numbers.add(randomQuestion);
            }
        }

我发现了很多话题,但没有与我合作

2 个答案:

答案 0 :(得分:2)

首先声明一个变量,该变量是要产生的最大整数(我使用100),然后在循环中产生随机数,直到列表中不存在1:

int max = 100;

ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(54);
numbers.add(11);
numbers.add(6);
numbers.add(8);
numbers.add(32);

int randomQuestion = 0;
boolean exists = false;
do {
    randomQuestion = new Random().nextInt(max) + 1;
    exists = numbers.contains(randomQuestion);
} while(exists);
numbers.add(randomQuestion);

System.out.println(randomQuestion);

请注意,随着列表的增加,循环可能需要更长的时间才能完成,并且如果列表中充满了1至100的所有数字,则循环不会停止。
因此,您必须检查是否已生成所有数字,或者列表的大小是否小于100,如果是,则要求输入新的随机数。

答案 1 :(得分:1)

或者,您可以预先生成一个从1到100的所有数字的列表,然后对列表进行随机排序。从功能上来说,这会为您提供一个新的随机数,您在每次浏览列表时都不会看到它,而且应该很快。

List<Integer> numbers = new ArrayList<>(100);

for (int i = 1; i <= 100; ++i) {
    numbers.add(i);
}

Collections.shuffle(numbers);