亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索

Java實(shí)現(xiàn)指定范圍素?cái)?shù)查找及結(jié)果數(shù)組封裝指南

聖光之護(hù)
發(fā)布: 2025-08-16 23:42:18
原創(chuàng)
485人瀏覽過(guò)

Java實(shí)現(xiàn)指定范圍素?cái)?shù)查找及結(jié)果數(shù)組封裝指南

本教程旨在指導(dǎo)讀者如何在Java中高效查找指定范圍內(nèi)的素?cái)?shù),并將其收集到一個(gè)整型數(shù)組中返回。我們將詳細(xì)介紹素?cái)?shù)判斷方法isPrime的實(shí)現(xiàn),以及如何利用ArrayList動(dòng)態(tài)收集素?cái)?shù),最終將其轉(zhuǎn)換為固定大小的int數(shù)組。文章還將強(qiáng)調(diào)在不同類(lèi)之間分離業(yè)務(wù)邏輯與輸出操作的最佳實(shí)踐,確保代碼的模塊化和可維護(hù)性。

在java編程中,經(jīng)常會(huì)遇到需要對(duì)特定數(shù)據(jù)進(jìn)行篩選和處理的場(chǎng)景。查找指定范圍內(nèi)的素?cái)?shù)并以數(shù)組形式返回,是這類(lèi)問(wèn)題的一個(gè)典型示例。本教程將詳細(xì)闡述如何構(gòu)建一個(gè)功能完善、結(jié)構(gòu)清晰的解決方案。

1. 素?cái)?shù)判斷方法 isPrime 的實(shí)現(xiàn)

素?cái)?shù)(或稱(chēng)質(zhì)數(shù))是指在大于1的自然數(shù)中,除了1和它本身以外不再有其他因數(shù)的數(shù)。例如,2、3、5、7都是素?cái)?shù)。一個(gè)高效且正確的素?cái)?shù)判斷方法是整個(gè)解決方案的基礎(chǔ)。

以下是 isPrime 方法的優(yōu)化實(shí)現(xiàn):

public class Prime {

    /**
     * 判斷一個(gè)整數(shù)是否為素?cái)?shù)。
     * 進(jìn)行了以下優(yōu)化:
     * 1. 小于等于1的數(shù)不是素?cái)?shù)。
     * 2. 2是唯一的偶數(shù)素?cái)?shù)。
     * 3. 所有大于2的偶數(shù)都不是素?cái)?shù)。
     * 4. 循環(huán)檢查因子時(shí),只需檢查到數(shù)的平方根即可。
     *
     * @param n 待判斷的整數(shù)
     * @return 如果n是素?cái)?shù)則返回true,否則返回false
     */
    private boolean isPrime(int n) {
        // 1及以下不是素?cái)?shù)
        if (n <= 1) {
            return false;
        }
        // 2是最小的素?cái)?shù)
        if (n == 2) {
            return true;
        }
        // 所有大于2的偶數(shù)都不是素?cái)?shù)
        if (n % 2 == 0) {
            return false;
        }
        // 從3開(kāi)始,只檢查奇數(shù)因子,直到其平方根
        // 因?yàn)槿绻鹡有一個(gè)大于其平方根的因子,那么它必然還有一個(gè)小于其平方根的因子
        for (int i = 3; i * i <= n; i += 2) {
            if (n % i == 0) {
                return false; // 發(fā)現(xiàn)因子,不是素?cái)?shù)
            }
        }
        return true; // 沒(méi)有發(fā)現(xiàn)因子,是素?cái)?shù)
    }

    // 后續(xù)的 test 方法將在此處添加
}
登錄后復(fù)制

代碼解析:

  • n <= 1: 根據(jù)素?cái)?shù)定義,1及以下不是素?cái)?shù)。
  • n == 2: 2是唯一的偶數(shù)素?cái)?shù),單獨(dú)處理。
  • n % 2 == 0: 排除所有大于2的偶數(shù),因?yàn)樗鼈兌疾皇撬財(cái)?shù)。
  • *`for (int i = 3; i i <= n; i += 2):** 這是關(guān)鍵的優(yōu)化。我們只需從3開(kāi)始,以2為步長(zhǎng)(只檢查奇數(shù)),檢查到n的平方根。如果n` 在這個(gè)范圍內(nèi)沒(méi)有因子,那么它就是素?cái)?shù)。

2. 在指定范圍內(nèi)查找并收集素?cái)?shù)

有了 isPrime 方法,我們就可以遍歷給定范圍 [a, b] 內(nèi)的所有整數(shù),并利用 isPrime 判斷它們是否為素?cái)?shù)。由于我們事先不知道范圍內(nèi)有多少個(gè)素?cái)?shù),所以不能直接創(chuàng)建一個(gè)固定大小的數(shù)組。這時(shí),java.util.ArrayList 提供了一個(gè)靈活的解決方案。ArrayList 可以在運(yùn)行時(shí)動(dòng)態(tài)地添加元素。

立即學(xué)習(xí)Java免費(fèi)學(xué)習(xí)筆記(深入)”;

在收集完所有素?cái)?shù)后,我們需要將其轉(zhuǎn)換為 int[] 數(shù)組,因?yàn)榉椒ê灻蠓祷?int[]。Java 8 引入的 Stream API 使得這種轉(zhuǎn)換變得非常簡(jiǎn)潔。

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors; // 盡管這里直接用toArray,但import List是必須的

public class Prime {

    // ... isPrime 方法(如上所示) ...

    /**
     * 在指定范圍內(nèi)查找所有素?cái)?shù),并將其作為整型數(shù)組返回。
     * 該方法遵循職責(zé)分離原則,不進(jìn)行任何輸出操作,只負(fù)責(zé)計(jì)算和返回?cái)?shù)據(jù)。
     *
     * @param a 范圍的起始值(包含)
     * @param b 范圍的結(jié)束值(包含)
     * @return 包含指定范圍內(nèi)所有素?cái)?shù)的整型數(shù)組
     */
    public int[] test(int a, int b) {
        // 使用ArrayList來(lái)動(dòng)態(tài)收集素?cái)?shù)
        List<Integer> resultList = new ArrayList<>();

        // 遍歷指定范圍內(nèi)的所有整數(shù)
        // 注意:循環(huán)條件應(yīng)確保包含b
        for (int i = a; i <= b; i++) {
            if (isPrime(i)) {
                resultList.add(i); // 如果是素?cái)?shù),則添加到列表中
            }
        }

        // 將List<Integer>轉(zhuǎn)換為int[]
        // 使用Stream API的mapToInt和toArray方法,高效完成轉(zhuǎn)換
        return resultList.stream()
                         .mapToInt(Integer::intValue) // 將Integer對(duì)象映射為int基本類(lèi)型
                         .toArray(); // 將流中的元素收集到int數(shù)組中
    }
}
登錄后復(fù)制

代碼解析:

  • List<Integer> resultList = new ArrayList<>();: 創(chuàng)建一個(gè) ArrayList 來(lái)存儲(chǔ)素?cái)?shù)。
  • for (int i = a; i <= b; i++): 遍歷從 a 到 b(包含 b)的每一個(gè)數(shù)字。
  • if (isPrime(i)): 調(diào)用我們之前實(shí)現(xiàn)的 isPrime 方法來(lái)判斷當(dāng)前數(shù)字是否為素?cái)?shù)。
  • resultList.add(i);: 如果是素?cái)?shù),將其添加到 resultList 中。
  • resultList.stream().mapToInt(Integer::intValue).toArray();: 這是將 List<Integer> 轉(zhuǎn)換為 int[] 的標(biāo)準(zhǔn)且高效的方式。
    • resultList.stream():將 ArrayList 轉(zhuǎn)換為一個(gè)流(Stream)。
    • mapToInt(Integer::intValue):將流中的 Integer 對(duì)象轉(zhuǎn)換為 int 基本類(lèi)型。Integer::intValue 是一個(gè)方法引用,等同于 i -> i.intValue()。
    • toArray():將流中的所有 int 元素收集到一個(gè)新的 int 數(shù)組中并返回。

3. 主程序調(diào)用與結(jié)果輸出

根據(jù)要求,所有的輸出操作(System.out.println)都應(yīng)該在 Main 類(lèi)中進(jìn)行。這意味著 Prime 類(lèi)中的 isPrime 和 test 方法只負(fù)責(zé)計(jì)算和返回?cái)?shù)據(jù),不涉及任何打印。這種職責(zé)分離是良好的編程實(shí)踐,它提高了代碼的模塊化、可測(cè)試性和可重用性。

騰訊智影-AI數(shù)字人
騰訊智影-AI數(shù)字人

基于AI數(shù)字人能力,實(shí)現(xiàn)7*24小時(shí)AI數(shù)字人直播帶貨,低成本實(shí)現(xiàn)直播業(yè)務(wù)快速增增,全天智能在線(xiàn)直播

騰訊智影-AI數(shù)字人73
查看詳情 騰訊智影-AI數(shù)字人
public class Main {
    public static void main(String... args) {
        // 實(shí)例化Prime類(lèi),以便調(diào)用其方法
        Prime p = new Prime();

        // 調(diào)用test方法,獲取指定范圍內(nèi)的素?cái)?shù)數(shù)組
        // 例如,查找10到30之間的素?cái)?shù)
        int[] primeNumbers = p.test(10, 30);

        // 遍歷并打印返回的素?cái)?shù)數(shù)組
        System.out.println("指定范圍內(nèi)的素?cái)?shù)有:");
        if (primeNumbers.length == 0) {
            System.out.println("無(wú)");
        } else {
            for (int i = 0; i < primeNumbers.length; i++) {
                System.out.print(primeNumbers[i]);
                if (i < primeNumbers.length - 1) {
                    System.out.print(", ");
                }
            }
            System.out.println(); // 換行
        }

        // 示例:查找1到10之間的素?cái)?shù)
        int[] primes1to10 = p.test(1, 10);
        System.out.println("1到10之間的素?cái)?shù)有:");
        for (int prime : primes1to10) {
            System.out.print(prime + " ");
        }
        System.out.println();
    }
}
登錄后復(fù)制

代碼解析:

  • Prime p = new Prime();: 創(chuàng)建 Prime 類(lèi)的一個(gè)實(shí)例。
  • int[] primeNumbers = p.test(10, 30);: 調(diào)用 Prime 實(shí)例的 test 方法,傳入范圍參數(shù),并將返回的素?cái)?shù)數(shù)組存儲(chǔ)在 primeNumbers 變量中。
  • 循環(huán)打?。?/strong> 遍歷 primeNumbers 數(shù)組,將每個(gè)素?cái)?shù)打印到控制臺(tái)。這里加入了逗號(hào)分隔和無(wú)素?cái)?shù)時(shí)的提示,使得輸出更友好。

4. 完整示例代碼

為了方便讀者理解和運(yùn)行,以下是 Prime.java 和 Main.java 的完整代碼:

Prime.java

import java.util.ArrayList;
import java.util.List;

public class Prime {

    /**
     * 判斷一個(gè)整數(shù)是否為素?cái)?shù)。
     * 進(jìn)行了以下優(yōu)化:
     * 1. 小于等于1的數(shù)不是素?cái)?shù)。
     * 2. 2是唯一的偶數(shù)素?cái)?shù)。
     * 3. 所有大于2的偶數(shù)都不是素?cái)?shù)。
     * 4. 循環(huán)檢查因子時(shí),只需檢查到數(shù)的平方根即可。
     *
     * @param n 待判斷的整數(shù)
     * @return 如果n是素?cái)?shù)則返回true,否則返回false
     */
    private boolean isPrime(int n) {
        if (n <= 1) {
            return false;
        }
        if (n == 2) {
            return true;
        }
        if (n % 2 == 0) {
            return false;
        }
        for (int i = 3; i * i <= n; i += 2) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }

    /**
     * 在指定范圍內(nèi)查找所有素?cái)?shù),并將其作為整型數(shù)組返回。
     * 該方法遵循職責(zé)分離原則,不進(jìn)行任何輸出操作,只負(fù)責(zé)計(jì)算和返回?cái)?shù)據(jù)。
     *
     * @param a 范圍的起始值(包含)
     * @param b 范圍的結(jié)束值(包含)
     * @return 包含指定范圍內(nèi)所有素?cái)?shù)的整型數(shù)組
     */
    public int[] test(int a, int b) {
        // 確保范圍有效,如果a大于b,可以考慮拋出異?;蚍祷乜諗?shù)組
        if (a > b) {
            return new int[0]; // 返回空數(shù)組
        }

        List<Integer> resultList = new ArrayList<>();
        for (int i = a; i <= b; i++) {
            if (isPrime(i)) {
                resultList.add(i);
            }
        }

        // 將List<Integer>轉(zhuǎn)換為int[]
        return resultList.stream()
                         .mapToInt(Integer::intValue)
                         .toArray();
    }
}
登錄后復(fù)制

Main.java

public class Main {
    public static void main(String... args) {
        Prime p = new Prime();

        // 示例1:查找10到30之間的素?cái)?shù)
        int[] primeNumbers1 = p.test(10, 30);
        System.out.println("10到30之間的素?cái)?shù)有:");
        if (primeNumbers1.length == 0) {
            System.out.println("無(wú)");
        } else {
            for (int i = 0; i < primeNumbers1.length; i++) {
                System.out.print(primeNumbers1[i]);
                if (i < primeNumbers1.length - 1) {
                    System.out.print(", ");
                }
            }
            System.out.println();
        }

        // 示例2:查找1到10之間的素?cái)?shù)
        int[] primeNumbers2 = p.test(1, 10);
        System.out.println("1到10之間的素?cái)?shù)有:");
        if (primeNumbers2.length == 0) {
            System.out.println("無(wú)");
        } else {
            for (int prime : primeNumbers2) {
                System.out.print(prime + " ");
            }
            System.out.println();
        }

        // 示例3:查找一個(gè)沒(méi)有素?cái)?shù)的范圍 (例如:4到6)
        int[] primeNumbers3 = p.test(4, 6);
        System.out.println("4到6之間的素?cái)?shù)有:");
        if (primeNumbers3.length == 0) {
            System.out.println("無(wú)");
        } else {
            for (int prime : primeNumbers3) {
                System.out.print(prime + " ");
            }
            System.out.println();
        }

        // 示例4:無(wú)效范圍 (a > b)
        int[] primeNumbers4 = p.test(30, 10);
        System.out.println("30到10之間的素?cái)?shù)有:");
        if (primeNumbers4.length == 0) {
            System.out.println("無(wú)");
        } else {
            for (int prime : primeNumbers4) {
                System.out.print(prime + " ");
            }
            System.out.println();
        }
    }
}
登錄后復(fù)制

5. 注意事項(xiàng)與最佳實(shí)踐

  • isPrime 方法的性能: 當(dāng)前的 isPrime 方法對(duì)于單個(gè)數(shù)字的判斷是相對(duì)高效的。但如果需要在一個(gè)非常大的范圍內(nèi)查找素?cái)?shù)(例如,數(shù)百萬(wàn)甚至數(shù)十億),這種逐個(gè)判斷的方法可能會(huì)效率低下。在這種情況下,可以考慮使用更高級(jí)的素?cái)?shù)篩法,如埃拉托斯特尼篩法(Sieve of Eratosthenes),它能一次性找出某個(gè)上限之前的所有素?cái)?shù)。
  • 代碼模塊化與職責(zé)分離: 本教程嚴(yán)格遵循了將業(yè)務(wù)邏輯(Prime 類(lèi))與輸出邏輯(Main 類(lèi))分離的原則。這種設(shè)計(jì)模式使得 Prime 類(lèi)更具通用性,可以在其他項(xiàng)目中被重用,而無(wú)需關(guān)心如何展示結(jié)果。
  • 錯(cuò)誤處理: 在 test 方法中,我們簡(jiǎn)單地處理了 a > b 的情況,返回了一個(gè)空數(shù)組。在實(shí)際應(yīng)用中,根據(jù)需求,也可以選擇拋出 IllegalArgumentException 來(lái)明確指出參數(shù)錯(cuò)誤。
  • 可讀性: 適當(dāng)?shù)淖⑨尯陀幸饬x的變量名可以大大提高代碼的可讀性。

通過(guò)本教程,您應(yīng)該已經(jīng)掌握了如何在Java中查找指定范圍內(nèi)的素?cái)?shù),并將其封裝成數(shù)組返回的完整過(guò)程,同時(shí)也理解了代碼結(jié)構(gòu)和設(shè)計(jì)上的最佳實(shí)踐。

以上就是Java實(shí)現(xiàn)指定范圍素?cái)?shù)查找及結(jié)果數(shù)組封裝指南的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!

最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件
最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件

每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。

下載
來(lái)源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn
最新問(wèn)題
開(kāi)源免費(fèi)商場(chǎng)系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見(jiàn)反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線(xiàn)php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)