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

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

我尝试使用'for'循环来遍历我的数组中的每个元素,以检查它是否是素数。虽然它从数组中打印出一些int,但它们不是素数。

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ą.");
            }
        }
    }

解决这个问题的任何方法?我4天前开始独自学习Java。到目前为止一切顺利,我理解大部分基础知识。但这个问题对我来说似乎太复杂了,一个初学者。

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


守着星空守着你
浏览 526回答 2
2回答

叮当猫咪

在编写Java代码时,尝试将任务拆分为函数(仅用于单个目的)。为了你的代码提取确定Prime的逻辑到一个单独的方法并传递随机数来检查它是否是素数,如果是,则打印否则不打印或什么也不做。请检查以下代码段一种更简单有效的方法来查找素数public&nbsp;static&nbsp;boolean&nbsp;isPrime(int&nbsp;n)&nbsp;{&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(n&nbsp;<=&nbsp;1)&nbsp;{&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;2;&nbsp;i&nbsp;<=&nbsp;Math.sqrt(n);&nbsp;i++)&nbsp;{&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(n&nbsp;%&nbsp;i&nbsp;==&nbsp;0)&nbsp;{&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;private&nbsp;static&nbsp;void&nbsp;printPrimeNumbers(){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;tab.length;&nbsp;i++){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(isPrime(tab[i])){&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(tab[i]&nbsp;+&nbsp;"&nbsp;jest&nbsp;liczbą&nbsp;pierwszą."); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;}

慕斯709654

你只设置isPrime至true之初printPrimeNumbers。一旦找到第一个复合数字,它就变成了false,你再也不会把它true重新设置为测试下一个数字。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java