专业的JAVA编程教程与资源

网站首页 > java教程 正文

编写函数找出1到1000之内能被3整除且不是偶数的整数

temp10 2025-04-01 22:19:20 java教程 3 ℃ 0 评论

编写函数找出1到1000之内能被3整除且不是偶数的整数,并按个位数的大小从大到小排序


编写函数找出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);
        }
    }
}

代码解释:

  1. findAndSortNumbers() 方法:
  2. List numbers = new ArrayList<>();: 创建一个 ArrayList 类型的 numbers 列表,用于存储符合条件的整数。
  3. for (int i = 1; i <= 1000; i++) { ... }: 使用 for 循环遍历从 1 到 1000 的所有整数。
  4. 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);
  5. 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 的顺序可以保持不变。
  6. return numbers;: 返回排序后的 numbers 列表。
  7. main(String[] args) 方法:
  8. List result = findAndSortNumbers();: 调用 findAndSortNumbers() 方法获取结果列表。
  9. System.out.println("符合条件的整数 (按个位数从大到小排序):");: 打印提示信息。
  10. for (Integer number : result) { System.out.println(number); }: 使用增强型 for 循环遍历 result 列表,并逐行打印每个符合条件的整数。

运行代码:

  1. 保存代码: 将代码保存为 FindNumbers.java 文件。
  2. 编译代码: 在命令行或终端中,使用 javac FindNumbers.java 命令编译 Java 文件。
  3. 运行代码: 使用 java FindNumbers 命令运行编译后的程序。

程序会在控制台输出符合条件的整数列表,这些整数都是 1 到 1000 之间能被 3 整除且不是偶数的,并且按照个位数从大到小排列。

输出结果示例 (部分):

复制代码符合条件的整数 (按个位数从大到小排序):
999
993
987
...
27
21
15
9
3

总结:

这段代码清晰地完成了题目要求的两个主要任务:

  1. 筛选: 找出 1 到 1000 之间能被 3 整除且不是偶数的整数。
  2. 排序: 将筛选出的整数按照个位数从大到小进行排序。

代码使用了 ArrayList 存储结果,for 循环进行遍历和筛选,Collections.sort() 和自定义 Comparator 实现排序,代码结构良好,易于理解和维护。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表