编写函数找出1到1000之内能被3整除且不是偶数的整数,并按个位数的大小从大到小排序
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class FindNumbers {
/**
* 找出 1 到 1000 之内能被 3 整除且不是偶数的整数,并按个位数从大到小排序
*
* @return 排序后的整数列表
*/
public static List findAndSortNumbers() {
List numbers = new ArrayList<>();
// 1. 找出 1 到 1000 之内能被 3 整除且不是偶数的整数
for (int i = 1; i <= 1000; i++) {
if (i % 3 == 0 && i % 2 != 0) { // 条件1: 能被 3 整除 (i % 3 == 0) 条件2: 不是偶数 (i % 2 != 0)
numbers.add(i);
}
}
// 2. 按个位数的大小从大到小排序
Collections.sort(numbers, new Comparator() {
@Override
public int compare(Integer num1, Integer num2) {
// 获取 num1 和 num2 的个位数
int digit1 = num1 % 10;
int digit2 = num2 % 10;
// 按个位数从大到小排序 (降序)
// 如果 digit2 > digit1,则 num2 应该排在 num1 前面,返回正数
// 如果 digit2 < digit1,则 num1 应该排在 num2 前面,返回负数
// 如果 digit2 == digit1,则顺序不变,返回 0
return Integer.compare(digit2, digit1); // 使用 Integer.compare 简化比较
}
});
return numbers;
}
public static void main(String[] args) {
List result = findAndSortNumbers();
System.out.println("符合条件的整数 (按个位数从大到小排序):");
for (Integer number : result) {
System.out.println(number);
}
}
}
代码解释:
- findAndSortNumbers() 方法:
- List
numbers = new ArrayList<>(); : 创建一个 ArrayList 类型的 numbers 列表,用于存储符合条件的整数。 - for (int i = 1; i <= 1000; i++) { ... }: 使用 for 循环遍历从 1 到 1000 的所有整数。
- if (i % 3 == 0 && i % 2 != 0) { ... }: if 条件语句判断当前整数 i 是否同时满足两个条件:i % 3 == 0: 判断 i 是否能被 3 整除 (余数为 0)。i % 2 != 0: 判断 i 是否不是偶数 (余数不为 0),即是否是奇数。如果两个条件都满足,则将整数 i 添加到 numbers 列表中:numbers.add(i);
- Collections.sort(numbers, new Comparator
() { ... }); : 使用 Collections.sort() 方法对 numbers 列表进行排序。numbers: 要排序的列表。new Comparator() { ... } : 创建一个匿名内部类,实现 Comparator接口。Comparator 接口用于定义自定义的比较规则。 @Override public int compare(Integer num1, Integer num2) { ... }: 重写 Comparator 接口的 compare() 方法。这个方法定义了两个 Integer 对象 num1 和 num2 的比较逻辑。int digit1 = num1 % 10;: 计算 num1 的个位数 (使用 % 10 取余数)。int digit2 = num2 % 10;: 计算 num2 的个位数。return Integer.compare(digit2, digit1);: 使用 Integer.compare(digit2, digit1) 方法比较 digit2 和 digit1。Integer.compare(digit2, digit1) 的作用: 实现 降序排序 (从大到小)。如果 digit2 > digit1,Integer.compare() 返回正数,表示 num2 应该排在 num1 前面。如果 digit2 < digit1,Integer.compare() 返回负数,表示 num1 应该排在 num2 前面。如果 digit2 == digit1,Integer.compare() 返回 0,表示 num1 和 num2 的顺序可以保持不变。 - return numbers;: 返回排序后的 numbers 列表。
- main(String[] args) 方法:
- List
result = findAndSortNumbers(); : 调用 findAndSortNumbers() 方法获取结果列表。 - System.out.println("符合条件的整数 (按个位数从大到小排序):");: 打印提示信息。
- for (Integer number : result) { System.out.println(number); }: 使用增强型 for 循环遍历 result 列表,并逐行打印每个符合条件的整数。
运行代码:
- 保存代码: 将代码保存为 FindNumbers.java 文件。
- 编译代码: 在命令行或终端中,使用 javac FindNumbers.java 命令编译 Java 文件。
- 运行代码: 使用 java FindNumbers 命令运行编译后的程序。
程序会在控制台输出符合条件的整数列表,这些整数都是 1 到 1000 之间能被 3 整除且不是偶数的,并且按照个位数从大到小排列。
输出结果示例 (部分):
复制代码符合条件的整数 (按个位数从大到小排序):
999
993
987
...
27
21
15
9
3
总结:
这段代码清晰地完成了题目要求的两个主要任务:
- 筛选: 找出 1 到 1000 之间能被 3 整除且不是偶数的整数。
- 排序: 将筛选出的整数按照个位数从大到小进行排序。
代码使用了 ArrayList 存储结果,for 循环进行遍历和筛选,Collections.sort() 和自定义 Comparator 实现排序,代码结构良好,易于理解和维护。
本文暂时没有评论,来添加一个吧(●'◡'●)