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]); } } }
3 Réponses :
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]); } }
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 !
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.
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
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 malVous 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 iciVeuillez lire un exemple reproductible minimal et améliorer votre question