2016-03-23 27 views
-3

我正在嘗試編寫一個程序來檢查它是否爲素數,並返回一個字符串,如果爲true,則返回no,如果爲false。我試圖在我的主要方法內使用while循環,但我遇到問題執行它。我在void方法內部完成了它,並且在主要方法中調用了該方法,但這不是我想要的。帶有While循環的素數

我希望它在我的主要方法中,並返回一個字符串是,如果它是素數,並且字符串否,如果它不是素數。請有任何想法嗎?在下面的方法中查看我的代碼。任何想法如何在我的主要方法轉換它返回yes或no作爲字符串?

import java.util.Scanner; 

public class PrimeNumbers { 
    public static void main(String[] args) { 

    Scanner in = new Scanner(System.in); 

    System.out.print("Enter a number: "); 
    int number = in .nextInt(); 

    isPrime(number); 
    } 

    public static void isPrime(int n) { 
    if (n % 2 == 0) { 
     System.out.println("It is not a prime number"); 
     return; 
    } else { 
     int i = 3; 
     while (i <= Math.sqrt(n)) { 
     if ((n % i) == 0) { 
      System.out.println("It is not a prime number"); 
      return; 
     } 
     i = i + 2; 
     } 
    } 
    System.out.println("It is a prime number"); 
    return; 

    } 

} 
+1

如何複製的身體isPrime()'變成'main()',其中isPrime(數字);'現在是? (當然,將'n'改爲'number'(反之亦然)。) –

+0

您無法從void方法返回String。 – Naveed

+0

您的isPrime方法不正確。任何小於或等於1的整數都不是素數。 2和3是素數。 4不是素數。任何5或更大的整數都可以在您的while循環中進行測試。 –

回答

0

Erhm,只需複製並粘貼到您main方法體,並使用boolean確定要打印出什麼結果。

public static void main(String[] args) { 

    Scanner in = new Scanner(System.in); 
    System.out.print("Enter a number: "); 
    int number = in.nextInt(); 
    boolean prime = false; 

    if (number % 2 == 0) { 
     prime = false; 
    } else { 
     int i=3; 
     while (i<=Math.sqrt(number)) { 
      if ((number % i) == 0) { 
       prime = true; 
      } 
      i+=2; 
     } 
    } 

    if (prime) { 
     System.out.println("It is a prime number"); 
    } else { 
     System.out.println("It is not a prime number"); 
    } 
} 
0

有你isPrime方法返回的boolean代替void

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

然後在main檢查

if(isPrime(2)) { 
    System.out.println("Is a prime number!"); 
} else { 
    System.out.println("It is not a prime number!"); 
} 
0

我有點不確定什麼是你想要的。這聽起來像你想創建一個返回yes或不返回的函數?如果是這樣的話,你可以創建如下算法:

public static String isPrime(int num){ 
    for(int i = 2; i < num; i++) { 
     if(num % i == 0) 
      return "No"; 
    } 
    return "Yes"; 
} 

關於如何優化這個算法詳見here

然後,你可以調用的主要方法:

public static void main(String[] args) { 

    Scanner in = new Scanner(System.in); 

    System.out.print("Enter a number: "); 
    int number = in.nextInt(); 

    System.out.println(isPrime(number)); 
} 

如果你只是希望這一切在你的主,這樣做:

public static void main(String[] args) { 

    Scanner in = new Scanner(System.in); 

    System.out.print("Enter a number: "); 
    int number = in.nextInt(); 
    boolean b = true; 

    for(int i = 2; i < num; i++) { 
     if(num % i == 0){ 
      System.out.println("No"); 
      b = false; 
     } 
    } 
    if(b){ 
     System.out.println(isPrime(number)); 
    } 
} 
0
/** 
* Auto Generated Java Class. 
*/ 
public class ConvertingForToWhile { 


    public static void main(String[] args) { 
    final int MAX = 66; 
    boolean isPrime = true; 
    int j = 2; 

    while (j <= MAX/2 && isPrime) 
    { 
     if(MAX % j ==0) 
     { 
     isPrime = false; 
     } 
     j++; 
    } 
    System.out.println(MAX + " is Prime? " + isPrime); 

    } 



} 
+0

這將檢查max中的數字,如果你想從用戶那裏獲得數字,只需要導入掃描並初始化一些像int數字這樣的變量; –