1
votes

Pour imprimer les nombres premiers du tableau dans JAVA

Je veux créer un programme qui demandera à l'utilisateur de saisir 5 entiers en utilisant un tableau et de déterminer tous les nombres premiers entrés. Mais j'ai du mal avec ça. Quel semble être le problème? J'utilise JCreator pour cela.

package arrays;

import java.util.Scanner;

public class Examples {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in) ;
        System.out.println("Total numbers : ");
        int n = sc.nextInt();
        boolean isPrime =true;
        int result =0;
        System.out.println("Enter the Numbers : ");
        int [] numbers = new int[n];
        
        for(int i=0;i<n;i++) {
            numbers[i]=sc.nextInt();
        }
        for(int i=0;i<n;i++) {
            for(int j=2;j*j<numbers[i];j++) {
                if(numbers[i]%j ==0) {
                    isPrime =false ;
                    break;  
                }
            }
        }
        if(isPrime) {
            System.out.println("The Prime Numbers : " +numbers[i]);
        }
    }

}


5 commentaires

Quel semble être le problème? Pourriez-vous modifier votre question avec plus de détails sur la façon dont votre code ne fonctionne pas?


En passant, je suggérerais de mettre la partie if (isPrime) dans la deuxième boucle for (la boucle externe). La mise en cache des nombres premiers ne ferait pas non plus de mal


Vous entrez plusieurs nombres mais vous n'avez qu'une seule valeur isPrime


Il y a un problème dans cette ligne System.out.println("The Prime Numbers : " +numbers[i]); - i hors de portée ici


Veuillez lire un exemple reproductible minimal et améliorer votre question


3 Réponses :


0
votes

Vous devez vérifier isPrime dans la boucle externe

   for(int i=0;i<n;i++) {  // This loops for every number
       //inner both loops for check the number is prime
        boolean isPrime =true;
        for(int j=2;j*j<numbers[i];j++) {
            if(numbers[i]%j ==0) {
                isPrime =false ;
                break;  
            }
        }
        if(isPrime) {
           System.out.println("The Prime Numbers : " +numbers[i]);
        }
    }
    


0 commentaires

2
votes

Vous devez mettre isPrime() dans la boucle externe comme ci-dessous -

if(isPrime) {
    System.out.println("The Prime Numbers : " +numbers[i]);
}

Votre code a eu quelques erreurs -

System.out.println("The Prime Numbers : ");
for(int i=0;i<n;i++) {
    isPrime =true;  // setting it to true before checking for every numbers
    for(int j=2;j*j<numbers[i];j++) {
        if(numbers[i]%j ==0) {
            isPrime =false ;  // will become false only when not an prime
            break;  
        }
    }
    // isPrime will remain true if numbers[i] is a prime number. So print the prime number
    if(isPrime) {
        System.out.println(numbers[i]+" ");
    }
}

Premièrement, le morceau de code ci-dessus ne fonctionnerait pas, puisque la portée de i est limitée uniquement à la boucle for() . Même si i était déclaré en dehors de la boucle for, le nombre qui aurait été imprimé aurait toujours été le dernier nombre (si un nombre premier existait dans le nombre saisi par l'utilisateur). Ce n'est pas ce que nous voulons.

Donc, imprimez les nombres chaque fois que vous vérifiez qu'un nombre n'est pas premier. Après avoir terminé chaque boucle interne, vérifiez le booléen isPrime et s'il est vrai, nous savons que le nombre que nous vérifions actuellement ( numbers[i] ) est sûrement un nombre premier. Alors imprimez le numéro là-bas.

J'espère que cela t'aides !


0 commentaires

0
votes

L'extrait de code suivant résout tous les problèmes et vérifie uniquement les nombres impairs dans la boucle:

    for (int i = 0; i < n; i++) {
        isPrime = numbers[i] % 2 == 1;
        for (int j = 3; isPrime && j * j <= numbers[i]; j += 2) {
            if (numbers[i] % j == 0) {
               isPrime = false;
            }
        }
        if (isPrime && numbers[i] > 1) {
            System.out.println("The Prime Numbers : " + numbers[i]);
        }
    }

Vous devez également prendre en compte que 0 et 1 ne sont PAS des nombres premiers.


2 commentaires

Zéro explication, juste faire ses devoirs pour lui. Ce n'est pas ainsi que vous aidez les gens qui veulent apprendre la programmation. Résoudre tous leurs problèmes à leur place ralentit leur apprentissage. Ou avez-vous appris la programmation parce que d'autres personnes ont travaillé dur pour vous?


@GhostCat quelles explications sont nécessaires ici ?? OP a presque terminé son travail et a commis une erreur mineure que j'ai signalée dans les commentaires. Cette réponse fournit juste une optimisation pour sauter les nombres pairs et ne pas compter 0 comme premier