我在一个月前开始学习Java,今天我看到了这个我无法解决的问题。
问题是:
编写名为
isPrime
的方法,该方法将整数作为参数并返回true
如果参数是素数,或者false
。在完整的程序中演示该方法。
第二部分说:
使用您在以前程序中编写的
isPrime
方法 将1
到100
中所有素数的列表存储在文件中。
这是我的代码,不起作用:
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;
}
}
}
}
答案 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
!使用返回的值。我们做到了......现在就试试吧!
答案 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";
}
}
}