[英]Writing a program that determines a prime number
我正在嘗試編寫一個要求用戶輸入數字的程序,然后需要創建一個名為isPrime
的方法來創建計算並在main中打印出結果。 我確定這是我所缺少的小東西,但是我無法獲得准確的結果。
public static void main(String[] args) {
System.out.print("Enter number: ");
int num = s.nextInt();
if (isPrime(num) == true) {
System.out.println("Number is prime");
} else if (isPrime(num) == false) {
System.out.println("Number is not prime");
}
}
public static boolean isPrime(int num){
for(int i = 2; i <= num/2; i++) {
if (num%i != 0) {
return true;
}
}
return false;
}
使用if
和else
(在第一種情況下,請勿重新測試布爾條件)。 並且不要在if
測試== true
。 這個
if(isPrime(num) == true)
{
System.out.println("Number is prime");
}
else if(isPrime(num) == false)
{
System.out.println("Number is not prime");
}
應該只是
if (isPrime(num)) {
System.out.println("Number is prime");
} else {
System.out.pritnln("Number is not prime");
}
甚至像
System.out.print("Number is ");
if (!isPrime(num)) {
System.out.print("not ");
}
System.out.println("prime");
如果您想將括號放在自己的行上,請繼續。 至於您的isPrime
方法; 您的退貨條件發生了逆轉(測試也是如此)。 我們也可以對其進行優化。 展開第一個偶數測試,因為這樣我們就可以跳過所有其他元素。 同樣,我們只需要測試輸入數字的平方根即可。 喜歡,
public static boolean isPrime(int num) {
if (num == 2) {
return true; // two is prime.
}
if (num < 1 || num % 2 == 0) {
return false; // all other even numbers are not prime.
}
for(int i = 3; i <= Math.sqrt(num); i += 2) {
if (num % i == 0) {
return false;
}
}
return true;
}
您應該將“ if(num%i!= 0)”條件更改為if(num%i == 0)
請參見以下代碼:
public class Prime {
public static void main(String[] args) {
int num = 29;
boolean flag = false;
for(int i = 2; i <= num/2; ++i)
{
// condition for nonprime number
if(num % i == 0)
{
flag = true;
break;
}
}
if (!flag)
System.out.println(num + " is a prime number.");
else
System.out.println(num + " is not a prime number.");
}
}
isPrime(int num)方法可能需要檢查num % i == 0
而不是num % i != 0
因為許多非質數會通過該條件並返回true。
例如,如果調用isPrime(9)
,則條件isPrime(9)
將檢查9%2!= 0是否為真,並且該方法將說9為素數。
結果,您可以嘗試將方法更改為如下所示:
public static boolean isPrime(int num)
{
for(int i = 2; i <= num/2; i++)
{
if (num%i==0)
{
return false;
}
}
return true;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.