繁体   English   中英

如何在随机数数组中找到素数?

[英]How to find prime numbers in an array of random numbers?

我在随机生成的整数数组中查找质数时遇到问题。

我尝试使用“ for”循环遍历数组中的每个元素,以检查它是否是质数。 尽管它从数组中打印出一些整数,但它们不是素数。

public static void main(String[] args) {
        defineTable();
        printPrimeNumbers();
    }

    private static int[] tab;

    private static int[] defineTable(){
        tab = new int[100];
        for (int i = 0; i < tab.length; i++){
            tab[i] = randomFill();
        }
        return tab;
    }

    private static int randomFill (){
        Random rand = new Random();
        int randomInt = rand.nextInt();
        return randomInt;
    }


    private static void printPrimeNumbers(){
        boolean isPrime = true;
        for (int i = 0; i < tab.length; i++){
            int num = tab[i];
            for (int j = 2; j < num; j++){
                if (num % j == 0){
                    isPrime = false;
                    break;
                }
            }
            if(isPrime){
                System.out.println(num + " jest liczbą pierwszą.");
            }
        }
    }

这个问题有解决方案吗? 我四天前开始学习Java。 到目前为止,一切进展顺利,我了解大部分基本知识。 但是对于初学者来说,这个问题对我来说似乎太复杂了。

编辑:我将大多数代码变量从波兰语翻译成英语,因为我的母语是波兰语,希望它是可以理解的。

你只设置isPrimetrue之初printPrimeNumbers 一旦找到第一个复合数字,它将变为false ,您再也不会将其重置为true来测试下一个数字。

在编写Java代码时,请尝试将任务拆分为多个函数(仅应用于一个目的)。 对于您的代码,将确定质数的逻辑提取到单独的方法中,并传递随机数以检查其是否为质数,如果是,则打印,否则不打印或不执行任何操作。

请检查以下代码段

查找质数的一种简单有效的方法

public static boolean isPrime(int n) {  
           if (n <= 1) {  
               return false;  
           }  
           for (int i = 2; i <= Math.sqrt(n); i++) {  
               if (n % i == 0) {  
                   return false;  
               }  
           }  
           return true;  
       }  


private static void printPrimeNumbers(){
        for (int i = 0; i < tab.length; i++){
        if(isPrime(tab[i])){ 
        System.out.println(tab[i] + " jest liczbą pierwszą.");
       } 

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM