Java实现:在1-100数组中合并输出3和5的倍数
嘿,我来帮你搞定这个Java问题!你想要的是把1到100中所有3或5的倍数按从小到大的顺序输出,而且不能重复(比如15只出现一次)对吧?我给你两种实用的解决方案,再帮你分析下之前踩的坑。
方案一:直接遍历筛选(高效且天然有序)
这是最直接的方式,遍历1到100的每个数字,逐个判断是否符合条件,符合就收集起来——因为是从小到大遍历,结果天然有序,还能避免重复。
示例代码
import java.util.ArrayList; import java.util.List; public class MultiplesOf3And5 { public static void main(String[] args) { List<Integer> resultList = new ArrayList<>(); // 从1到100逐个检查每个数字 for (int num = 1; num <= 100; num++) { // 只要是3的倍数 OR 5的倍数,就加入列表 if (num % 3 == 0 || num % 5 == 0) { resultList.add(num); } } // 按要求输出结果(空格分隔) for (int number : resultList) { System.out.print(number + " "); } } }
关键细节解释
- 遍历顺序:从1到100依次检查,所以收集到的数字本身就是从小到大排列的,不需要额外排序。
- 判断条件:这里用的是
||(逻辑或),意思是满足任意一个条件就会被选中。像15这种同时是3和5倍数的数,只会被检查一次,自然不会重复出现在结果里。 - 结果收集:用
ArrayList存储方便后续扩展(比如统计总数、修改输出格式),你也可以直接在循环里打印,不用列表。
为什么之前的代码只输出了同时被3和5整除的数?
你之前应该是用了&&(逻辑与)而不是||!num % 3 == 0 && num % 5 == 0这个条件只会筛选出同时是3和5倍数的数(也就是15的倍数),这就是为什么你只能得到那些数。把&&换成||就能解决这个问题啦。
方案二:合并集合后去重排序(适合需要单独处理两组倍数的场景)
如果你的需求里需要先分别收集3和5的倍数,再合并,那可以用TreeSet来实现——它会自动帮你排序+去重。
示例代码
import java.util.TreeSet; public class MergeMultiples { public static void main(String[] args) { // TreeSet会自动对元素排序,同时自动去重 TreeSet<Integer> multiplesSet = new TreeSet<>(); // 添加所有3的倍数 for (int i = 3; i <= 100; i += 3) { multiplesSet.add(i); } // 添加所有5的倍数(重复的会被自动忽略) for (int i = 5; i <= 100; i += 5) { multiplesSet.add(i); } // 输出有序无重复的结果 for (int num : multiplesSet) { System.out.print(num + " "); } } }
解释
TreeSet的特性是元素有序且唯一,所以不管我们先加3的倍数还是5的倍数,最终的集合都是从小到大排列,而且不会有重复元素。不过这种方法需要两次遍历,效率比第一种稍低,但如果需要单独处理3或5的倍数集合,这种方式更灵活。
两种方法都能得到你想要的3 5 6 9 10 12 15 ...这样的有序结果,你可以根据自己的需求选择~
内容的提问来源于stack exchange,提问作者Fiendnyx
相关产品推荐
相关产品推荐

