【问题标题】:ArrayList, Loop and requisite if can not work that i want - Java 11ArrayList、Loop 和必要条件(如果不能按我的意愿工作)-Java 11
【发布时间】:2020-03-05 14:42:21
【问题描述】:

我在比较列表中的数字时遇到问题,以便它不会使用 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);
            }
        }
    }

数字是重复的。

【问题讨论】:

  • 我在这里没有看到任何试图防止重复数字的代码。目前尚不清楚您要做什么。

标签: java list loops if-statement arraylist


【解决方案1】:

这是因为递归调用 addToListNumber()。为了简单起见,让我假设 maxPosition = 3 首先,您将 1 添加到列表中。然后假设 randomPosition = 2,然后将 2 添加到列表中并调用 addToListNumber()。现在假设 randomPosition = 1,然后在比较 integer == randomPosition 时再次调用 addToListNumber() (您只比较了这里的第一个元素并且它匹配)

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

【讨论】:

  • 好的,谢谢,我修复了我的代码。我使用布尔值,它工作这是我固定的``` if (list.size()
【解决方案2】:

如果我正确理解您的问题,您正在尝试构建一个包含 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));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多