Programme java, erreur dans le code

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
A voir également:

7 réponses

Blocks Messages postés 106 Statut Membre 3
 
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 278 Date d'inscription   Statut Membre Dernière intervention   32
 
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 1462 Statut Membre 106
 
Bonjour,

Tu essaies de modifier un vector qui est déjà en cours de modification.
Renseigne-toi du côté de synchronized.
0
Tartif
 
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
Tartif
 
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
Tartif
 
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
Tartif
 
Désolé d'avoir posté 3 fois le message, j'ai eu un soucis d'actualisation !
0