我如何找到 4、5 和 6 的前 5 个倍数并将它们添加到 ArrayList?
How would I find the first 5 multiples of 4, 5, and 6 and add them to an ArrayList?
我有一个家庭作业需要我编写一个方法,给定一个列表,将删除所有 3 的倍数并添加 4、5 和 6 的前 5 个倍数。然后它将那个列表添加到一个 HashSet,删除重复的整数,以及 return HashSet 的大小。
除了 "add first 5 multiples of 4, 5, and 6",我已经解决了这个问题中的所有其他问题。我当前的代码是我坚持使用的代码,使用 for 循环从 1 迭代到 30。但是,给定一个空列表,这会添加 28,这是 4 的第 7 个倍数。我尝试了嵌套循环,所以我可以迭代到 30,同时迭代到 5,但我的 none 次尝试都奏效了。谁能帮帮我?
下面是我当前的代码。
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();
}
与其数到 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 之前对列表进行排序。集合本质上没有顺序,所以列表是否排序并不重要。
我假设您希望传递空列表的输出为:
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);
}
我重写了整个方法并做了一些改动:
- 这样去除3的倍数部分效率更高。我
使用了非常有用的removeIf()方法。
- 我写了你的问题的解决方案,与另一个相同
答案。
代码
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
我有一个家庭作业需要我编写一个方法,给定一个列表,将删除所有 3 的倍数并添加 4、5 和 6 的前 5 个倍数。然后它将那个列表添加到一个 HashSet,删除重复的整数,以及 return HashSet 的大小。
除了 "add first 5 multiples of 4, 5, and 6",我已经解决了这个问题中的所有其他问题。我当前的代码是我坚持使用的代码,使用 for 循环从 1 迭代到 30。但是,给定一个空列表,这会添加 28,这是 4 的第 7 个倍数。我尝试了嵌套循环,所以我可以迭代到 30,同时迭代到 5,但我的 none 次尝试都奏效了。谁能帮帮我?
下面是我当前的代码。
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();
}
与其数到 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 之前对列表进行排序。集合本质上没有顺序,所以列表是否排序并不重要。
我假设您希望传递空列表的输出为:
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);
}
我重写了整个方法并做了一些改动:
- 这样去除3的倍数部分效率更高。我 使用了非常有用的removeIf()方法。
- 我写了你的问题的解决方案,与另一个相同 答案。
代码
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