Programme java, erreur dans le code

Fermé
Tartif - 17 févr. 2010 à 16:25
 Tartif - 17 févr. 2010 à 17:29
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
A voir également:

7 réponses

Blocks Messages postés 98 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 31 janvier 2011 3
17 févr. 2010 à 16:33
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
0
latoopa Messages postés 258 Date d'inscription dimanche 11 octobre 2009 Statut Membre Dernière intervention 5 janvier 2012 32
17 févr. 2010 à 16:58
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
0
biboo_ Messages postés 1249 Date d'inscription jeudi 20 août 2009 Statut Membre Dernière intervention 14 mars 2012 106
17 févr. 2010 à 17:10
Bonjour,

Tu essaies de modifier un vector qui est déjà en cours de modification.
Renseigne-toi du côté de synchronized.
0
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
0

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
0
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
0
Désolé d'avoir posté 3 fois le message, j'ai eu un soucis d'actualisation !
0