我将如何找到4、5和6的前5个倍数,并将它们添加到ArrayList中?

问题描述 投票:1回答:3

我有一项家庭作业,需要我编写一个方法,给定一个列表,该方法将删除3的所有倍数,并添加4、5和6的前5个倍数。然后将其添加到HashSet中,删除重复的整数,并返回HashSet的大小。

我已经弄清楚此问题中的所有其他内容,除了“添加4、5和6的前5个倍数”。我当前的代码是我坚持使用的代码,使用for循环从1迭代到30。但是,给定一个空列表,这将增加28,这是4的7倍。我尝试了嵌套循环,所以我尝试了可以迭代到30,而同时迭代到5,但是我的尝试都没有成功。谁能帮帮我?

下面是我当前的代码。

public static int modify(List<Integer> list)
    {
        for(int i = 0; i < list.size(); i++)
        {
            if(list.get(i) == null)
            {
                throw new IllegalArgumentException("Cannot be null.");
            }

            if(list.get(i) % 3 == 0)
            {
                list.remove(i);
            }
        }
        for(int i = 1; i <= 30; i++)
        {
            if(i % 4 == 0)
            {
                list.add(i);
            }
            if(i % 5 == 0)
            {
                list.add(i);
            }
            if(i % 6 == 0)
            {
                list.add(i);
            }
        }
        Collections.sort(list);
        HashSet<Integer> unique = new HashSet<Integer>();
        unique.addAll(list);
        return unique.size();
java loops arraylist multiplication modulo
3个回答
1
投票

而不是计数到30,而是检查4、5和6的倍数的发生率,为什么不直接找到该倍数?

for (int i = 1; i <= 5; i++) {
    list.add(4 * i);
    list.add(5 * i);
    list.add(6 * i);
}

如果有任何重复项,将它们添加到HashSet时将被删除。

旁注:我不确定为什么在将列表添加到HashSet之前不愿意对列表进行排序。集本来就没有顺序,因此列表是否排序无关紧要。


0
投票

我假设您期望传递空列表的输出为:

unique = [4, 5, 6, 8, 10, 12, 15, 16, 18, 20, 24, 25, 30]
size = 13

[根据您当前的逻辑,没有什么可以阻止它添加大于5的倍数(例如,乘以4的7的倍数),直到循环中达到30为止。相反,我可能建议让for循环进入1-5,然后乘以您想要的倍数。即:

        // add the first 5 multiples of 4,5,6 to the list
        for (int i = 1; i < 6; i++) {
            list.add(i*4);
            list.add(i*5);
            list.add(i*6);
        }

0
投票

我重写了整个方法并进行了一些更改:

  1. 以这种方式3的倍数的去除部分更有效。一世使用了非常有用的removeIf()方法。
  2. 我写了解决您问题的方法,与其他方法相同答案。

CODE

public static void main(String[] args) {
     List<Integer> list = new LinkedList<>();
     for (int i = 0; i < 30; i++) {
         list.add(i);
     }
     System.out.println(modify(list));
}

public static int modify(List<Integer> list) {
    list.removeIf(n -> (n % 3 == 0));
    for (int i = 1; i < 6; i++) {
        list.add(4 * i);
        list.add(5 * i);
        list.add(6 * i);
    }
    Collections.sort(list);
    HashSet<Integer> unique = new HashSet<>(list);
    System.out.println(unique.toString()); // You can delete this
    return unique.size();
}

输出

[1, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 28, 29, 30]

26
© www.soinside.com 2019 - 2024. All rights reserved.