使用自定义IsPrime方法查找素数

时间:2014-10-13 10:28:20

标签: java methods numbers

我在一个月前开始学习Java,今天我看到了这个我无法解决的问题。

问题是:

  

编写名为isPrime的方法,该方法将整数作为参数并返回true   如果参数是素数,或者false。在完整的程序中演示该方法。

第二部分说:

  

使用您在以前程序中编写的isPrime方法   将1100中所有素数的列表存储在文件中。

这是我的代码,不起作用:

import java.io.*;

public class PrimeNumbers {

    public static void main (String args[]) throws IOException {

        PrintWriter outputFile = new PrintWriter("PrimeNumber.txt");

        int j = 0;

        for (int i = 0; i < 100; i++) {
            isPrime(i); 
            outputFile.println("Prime nums are:" + i);
        }
    }
    public static boolean isPrime (int j) {

        int i;  
        for (j = 2; j < i; j++) {
            if (i % j == 0) {
                return false;
            }
            if (i == j) {
                return true;
            }
        }
    }
}

5 个答案:

答案 0 :(得分:2)

您在true - isPrime中返回if (i == j)的条件永远无法满足,因为它位于条件为j < i的循环中。相反,只需在循环后返回true。如果循环结束而没有返回false,则确定输入数字是素数。

使用isPrime的代码不会检查此方法返回的值。您必须检查它以决定是否将数字写入输出文件。

答案 1 :(得分:1)

import java.io.IOException;
import java.io.PrintWriter;

public class PrimeNumbers
{
    public static void main(String args[]) throws IOException
    {
        PrintWriter primeNumbersWriter = new PrintWriter("PrimeNumber.txt");

        for (int i = 0; i < 100; i++)
        {
            // You didn't do anything with the return value of isPrime()
            if (isPrime(i))
            {
                primeNumbersWriter.println("Prime numbers are: " + i);
            }
        }

        // Please close writers after using them
        primeNumbersWriter.close();
    }

    public static boolean isPrime(int prime)
    {
        // Do not use the number to check for prime as loop variable, also it's
        // sufficient to iterate till the square root of the number to check
        for (int number = 2; number < Math.sqrt(prime); number++)
        {
            if (prime % number == 0)
            {
                return false;
            }
        }

        // You didn't always return a value, it won't let you compile otherwise
        return true;
    }
}

答案 2 :(得分:1)

  

Prime Number
素数(或素数)是更大的自然数   除了1之外没有正除数的1和它本身。


逻辑应该是什么?

  • 将数字传递给方法。
  • 使用循环开始检查模%以找到至少一个可以除去传递数字的数字。
  • 检查,直到我们达到值passedNumber
  • 如果模数为至少一个提供0,那么它不是主要感谢上帝!
  • 如果模数不是0任何数字......哦,他Prime.

您的代码中存在哪些问题?

  • 您正在循环,但使用变量j这是限制,并且您正在递增它!
  • 如果您想循环浏览i < j条件i == j如何才能成真?
  • 如果方法返回boolean,为什么使用方法void!使用返回的值。
  • 如果没有找到除数,你最后可以返回false!

我们做到了......现在就试试吧!

答案 3 :(得分:0)

关于isPrime:首先,你应该循环for( j = 2; j*j <= i; j++)

这个循环的原因是如果一个数字不是素数,它的因子必须小于或等于i的平方根,所以在那个点之后不需要循环 现在,如果循环没有返回false - 返回true`

关于第二个功能:在检查之前使用ifPrime - if(isPrime(i)) {add i to list}

答案 4 :(得分:-1)

看这里是你的解决方案。

 import java.util.Scanner;
    public class Testing {

        public static void main(String args[]) {
            Scanner scnr = new Scanner(System.in);
            int number = Integer.MAX_VALUE;
            System.out.println("Enter number to check if prime or not ");
            while (number != 0) {
                number = scnr.nextInt();
                System.out.printf("Does %d is prime? %s %s  %s %n", number,
                        isPrime(number), isPrimeOrNot(number), isPrimeNumber(number));
            }
        }


        /*
         * Java method to check if an integer number is prime or not.
         * @return true if number is prime, else false
         */
        public static boolean isPrime(int number) {
            int sqrt = (int) Math.sqrt(number) + 1;
            for (int i = 2; i < sqrt; i++) {
                if (number % i == 0) {
                    // number is perfectly divisible - no prime
                    return false;
                }
            }
            return true;
        }


        /*
         * Second version of isPrimeNumber method, with improvement like not
         * checking for division by even number, if its not divisible by 2.
         */
        public static boolean isPrimeNumber(int number) {
            if (number == 2 || number == 3) {
                return true;
            }
            if (number % 2 == 0) {
                return false;
            }
            int sqrt = (int) Math.sqrt(number) + 1;
            for (int i = 3; i < sqrt; i += 2) {
                if (number % i == 0) {
                    return false;
                }
            }
            return true;
        }


        /*
         * Third way to check if a number is prime or not.
         */
        public static String isPrimeOrNot(int num) {
            if (num < 0) {
                return "not valid";
            }
            if (num == 0 || num == 1) {
                return "not prime";
            }
            if (num == 2 || num == 3) {
                return "prime number";
            }
            if ((num * num - 1) % 24 == 0) {
                return "prime";
            } else {
                return "not prime";
            }
        }
    }