Programme java, erreur dans le code
Tartif
-
Tartif -
Tartif -
Bonjour tout le monde,
J'ai un problème avec mon programme java. Je veux afficher des nombres premiers. Je les calcule puis les mets dans un vector. Puis je parcours ce vector avec un iterator, et je rajoute dans le vector des nombres premiers. Mais à l'éxécution, j'ai cette erreur :
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
je vous montre mon code :
private static void calculer (int limite) {
premiers.addElement(new Integer(2));
Iterator itPrem = premiers.iterator();
boolean bool;
for(int i = 3; i <= limite; i++) { // on commence à 3 car on sait que 2 est déjà un nombre premier !
bool = true;
while (itPrem.hasNext()){
int z = (Integer)itPrem.next();
if (i % z == 0){
bool = false;
}
}
if (bool == true) {
premiers.add(new Integer(i)); //ajout du nombre premier dans le vector
}
}
} // calculer
L'erreur se produit au moment où on ajoute dans le vector!
Pouvez-vous m'aider s'il vous plait.
Je dois utiliser un iterator obligatoirement.
Merci d'avance pour votre aide
J'ai un problème avec mon programme java. Je veux afficher des nombres premiers. Je les calcule puis les mets dans un vector. Puis je parcours ce vector avec un iterator, et je rajoute dans le vector des nombres premiers. Mais à l'éxécution, j'ai cette erreur :
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
je vous montre mon code :
private static void calculer (int limite) {
premiers.addElement(new Integer(2));
Iterator itPrem = premiers.iterator();
boolean bool;
for(int i = 3; i <= limite; i++) { // on commence à 3 car on sait que 2 est déjà un nombre premier !
bool = true;
while (itPrem.hasNext()){
int z = (Integer)itPrem.next();
if (i % z == 0){
bool = false;
}
}
if (bool == true) {
premiers.add(new Integer(i)); //ajout du nombre premier dans le vector
}
}
} // calculer
L'erreur se produit au moment où on ajoute dans le vector!
Pouvez-vous m'aider s'il vous plait.
Je dois utiliser un iterator obligatoirement.
Merci d'avance pour votre aide
7 réponses
-
Evites de faire plusieurs posts, les posts sans réponse se repèrent très bien, c'est juste que personne n'est compétent et disponible dans ce domaine. Si tu veux te retrouver en haut de la liste, fais simplement un up
-
Salut,
je veux bien essayer de t'aider mais la il manque une partie du code et mets tout ca entre balises code car après une dûre journée sur eclipse ca pique les yeux là !
A plus tard
Toopa -
Bonjour,
Tu essaies de modifier un vector qui est déjà en cours de modification.
Renseigne-toi du côté de synchronized. -
Désolé blocks,
Merci latoopa, voici tout mon code!
Je sais biboo que c'est ça l'erreur, j'ai fais un peu de recherche, mais je ne sais pas comemnt corriger!/** * Premiers - Liste des nombre premiers avec un java.util.Vector * * - Les premiers déjà trouvés sont stockés dans un java.util.Vector * - Pour tester si k est premier, on essaie de le diviser par les premiers déjà trouvés * * */ import java.util.*; public class Premiers { private static java.util.Vector premiers; private static void calculer (int limite) { premiers.addElement(new Integer(2)); Iterator itPrem = premiers.iterator(); boolean bool; for(int i = 3; i <= limite; i++) { // on commence à 3 car on sait que 2 est déjà un nombre premier ! bool = true; while (itPrem.hasNext()){ int z = (Integer)itPrem.next(); if (i % z == 0){ bool = false; } } if (bool == true) { premiers.add(new Integer(i)); //ajout du nombre premier dans le vector } } } // calculer private static void afficher (int limite) { Iterator itPrem = premiers.iterator(); int cpt = 0; while (itPrem.hasNext()) {// tant qu'il y a quelque chose dans le vector System.out.print(itPrem.next() + " "); // on affiche l'élément cpt++; if(cpt == 10) {// si le compteur est égal à 10 System.out.print("\n"); // on va à la ligne, car on doit mettre que 10 éléments par ligne cpt = 0; } } System.out.println ("\n" + "Il y a " + premiers.size() + " nombre(s) premier compris entre 0 et " + limite + "."); } // afficher public static void main (String[] args) { if (args.length != 1) { System.out.println("La commande est: java Premiers limite"); } else { premiers = new java.util.Vector(); int limite = Integer.parseInt(args[0]); calculer(limite); afficher(limite); } } // main } // Premiers -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Désolé blocks,
Merci latoopa, voici tout mon code!
Je sais biboo que c'est ça l'erreur, j'ai fais un peu de recherche, mais je ne sais pas comemnt corriger!/** * Premiers - Liste des nombre premiers avec un java.util.Vector * * - Les premiers déjà trouvés sont stockés dans un java.util.Vector * - Pour tester si k est premier, on essaie de le diviser par les premiers déjà trouvés * * */ import java.util.*; public class Premiers { private static java.util.Vector premiers; private static void calculer (int limite) { premiers.addElement(new Integer(2)); Iterator itPrem = premiers.iterator(); boolean bool; for(int i = 3; i <= limite; i++) { // on commence à 3 car on sait que 2 est déjà un nombre premier ! bool = true; while (itPrem.hasNext()){ int z = (Integer)itPrem.next(); if (i % z == 0){ bool = false; } } if (bool == true) { premiers.add(new Integer(i)); //ajout du nombre premier dans le vector } } } // calculer private static void afficher (int limite) { Iterator itPrem = premiers.iterator(); int cpt = 0; while (itPrem.hasNext()) {// tant qu'il y a quelque chose dans le vector System.out.print(itPrem.next() + " "); // on affiche l'élément cpt++; if(cpt == 10) {// si le compteur est égal à 10 System.out.print("\n"); // on va à la ligne, car on doit mettre que 10 éléments par ligne cpt = 0; } } System.out.println ("\n" + "Il y a " + premiers.size() + " nombre(s) premier compris entre 0 et " + limite + "."); } // afficher public static void main (String[] args) { if (args.length != 1) { System.out.println("La commande est: java Premiers limite"); } else { premiers = new java.util.Vector(); int limite = Integer.parseInt(args[0]); calculer(limite); afficher(limite); } } // main } // Premiers -
Désolé blocks,
Merci latoopa, voici tout mon code!
Je sais biboo que c'est ça l'erreur, j'ai fais un peu de recherche, mais je ne sais pas comemnt corriger!/** * Premiers - Liste des nombre premiers avec un java.util.Vector * * - Les premiers déjà trouvés sont stockés dans un java.util.Vector * - Pour tester si k est premier, on essaie de le diviser par les premiers déjà trouvés * * */ import java.util.*; public class Premiers { private static java.util.Vector premiers; private static void calculer (int limite) { premiers.addElement(new Integer(2)); Iterator itPrem = premiers.iterator(); boolean bool; for(int i = 3; i <= limite; i++) { // on commence à 3 car on sait que 2 est déjà un nombre premier ! bool = true; while (itPrem.hasNext()){ int z = (Integer)itPrem.next(); if (i % z == 0){ bool = false; } } if (bool == true) { premiers.add(new Integer(i)); //ajout du nombre premier dans le vector } } } // calculer private static void afficher (int limite) { Iterator itPrem = premiers.iterator(); int cpt = 0; while (itPrem.hasNext()) {// tant qu'il y a quelque chose dans le vector System.out.print(itPrem.next() + " "); // on affiche l'élément cpt++; if(cpt == 10) {// si le compteur est égal à 10 System.out.print("\n"); // on va à la ligne, car on doit mettre que 10 éléments par ligne cpt = 0; } } System.out.println ("\n" + "Il y a " + premiers.size() + " nombre(s) premier compris entre 0 et " + limite + "."); } // afficher public static void main (String[] args) { if (args.length != 1) { System.out.println("La commande est: java Premiers limite"); } else { premiers = new java.util.Vector(); int limite = Integer.parseInt(args[0]); calculer(limite); afficher(limite); } } // main } // Premiers -