2013-09-05 4 views
2

J'écris un programme qui prend en entrée un nombre entier, et affiche un message indiquant si l'entier entré est premier ou non. L'algorithme J'utilise est la suivante ... redemanderas n> 0, redemanderas isPrime < - vrai, pour i = 2 à sqrt (n) faire, si n% i = 0 puis isPrime < - false fin si et fin pour Puis Imprimer si le nombre est Premier ou non. Voici mon code jusqu'à présent, le code ne fonctionne pas et je ne suis pas en mesure de trouver le problème.Détermination des nombres premiers Java

 public static void main(String[] args) { 
    Scanner kb = new Scanner(System.in); 
    int n; 
    System.out.println("Input a positive integer"); 
    n = kb.nextInt(); 

     while (n>0){ 
      boolean isPrime = true; 
      for (int i =2; i <= n/2;i++){ 
       if(n % i == 0){ 
        isPrime = false; 
        break; 
       } 
      } 
      if (isPrime = true){ 
       System.out.println("The integer, " + n + ", is a prime"); 
       break; 
      } 
      else{ 
       System.out.println("The integer, " + n + ", is not a prime"); 
       break; 
      } 
     } 
    } 
} 

Je serais reconnaissant si quelqu'un pouvait aider, merci!

+1

Ça ne fonctionne pas? En quoi cela ne fonctionne-t-il pas? S'il vous plaît! Donnez-nous une idée! –

+3

Est-ce que vous réalisez que 'isPrime = true' est une assignation et non une comparaison? –

+2

Vous pouvez faire cela plus rapidement en omettant tous les nombres pairs sauf 2. http://www.mkyong.com/java/how-to-determine-a-prime-number-in-java/ – spuder

Répondre

8

Votre problème est lié à cette ligne:

if (isPrime = true){ 

Vous avez fait une mission, au lieu de comparer à true, de sorte que la déclaration est toujours true.

Utilisez == pour comparer les valeurs booléennes, ou mieux encore, puisque isPrime est déjà boolean:

if (isPrime){ 
+0

Merci beaucoup, qui a résolu mon problème, j'apprécie l'aide – CBH

1

Dans le texte que vous dites l'algorithme vous avez l'intention de mettre en œuvre des entiers vérifie jusqu'à la racine carrée de n mais votre code va jusqu'à n/2 (voir la boucle for).

La raison pour laquelle votre code actuel ne fonctionne pas est parce que if (isPrime = true) est une opération d'affectation et devrait être la comparaison if (isPrime == true) noter les deux signes égaux.

+0

J'ai un souvenir de vage de mes leçons d'algèbre, mais je pense que c'est comme ça que ça fonctionne –

Questions connexes