ArrayList,Loop和必要条件(如果我无法运行)-Java 11

我在比较列表中的数字时遇到问题,因此它不会使用Random重复。我希望数字是随机的,但是只能添加那些不在列表中的数字。

这是我的代码:

private void addToListNumber() {

int randomPosition = new Random().nextInt(5);
int maxPosition = 5;

        if (list.size() < 1) {
            list.add(1);
            addToListNumber();
        } else if (list.size() < maxPosition) {
            for (Integer integer : list) {
                if (integer == randomPosition) {
                    addToListNumber();
                }
            }
            list.add(randomPosition);
            addToListNumber();
        } else {

            for (Integer integer : list) {
                System.out.println(integer);
            }
        }
    }

数字重复。

tomjauh 回答:ArrayList,Loop和必要条件(如果我无法运行)-Java 11

如果我正确理解了您的问题,则您正在尝试以随机顺序构建5个整数的列表。

一种到达那里的简单方法是生成一个有序数字列表,然后随机交换它们。

首先创建您的订购号列表。

public List<Integer> createOrderedList(int size) {
    List<Integer> list = new ArrayList<>();

    for (int i = 0; i < size; i++) {
        list.add(i);
    }

    return list;
}

然后创建一个方法,该方法交换给定索引的列表中的两个元素。

public void swap(List<Integer> list,int i,int j) {
    Integer hold = list.get(i);
    list.set(i,list.get(j));
    list.set(j,hold);
}

最后,创建一个将所有元​​素混合在一起的方法。

public void mix(List<Integer> list) {
    Random random = new Random();

    for (int i = 0; i < list.size(); i++) {
        swap(list,i,random.nextInt(list.size()));
    }
}

按以下顺序调用方法:

List<Integer> list = createOrderedList(5);
mix(list);

for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

,

这是由于递归调用addToListNumber()而发生的。为了简单明了,我假设maxPosition = 3 首先,您将1添加到列表中。然后假设randomPosition = 2,然后将2加到列表中并调用addToListNumber()。现在假设randomPosition = 1,然后在比较整数== randomPosition时再次调用addToListNumber()(您只比较了此处的第一个元素,并且它与之匹配)

现在让randomPosition = 3和3插入。因为这是递归调用,所以返回到为randomPosition = 1调用的addToListNumber()(在前面的情况下),列表没有结束(列表中有{1,2,3}),只有第一个元素已进行比较。在循环末尾,它再次插入1,您的列表变为{1,3,1},因此重复。

本文链接:https://www.f2er.com/3134406.html

大家都在问