Ragazzi ho questo problema con Set ed HashSet.
Preaticamente devo risolvere il Crivello di Eratostene che di per sč č molto semplice ma lo devo fare usando Set ed HashSet, nel senso che devo usare i metodi add e remove.
La classe č questa:
codice:
public class Eratostene2{
public static void main(String [] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt(); // si assume n>=2
// costruisco insieme setPrimi = {2,...,n}
Set<Integer> setPrimi = new HashSet<Integer> ();
for(int k=2 ; k <=n ; k++){
setPrimi.add(new Integer(k));
}
/*
Iterator<Integer> it = setPrimi.iterator();
while(it.hasNext()){
Integer x = it.next();
int i=2;
if((x%i)==0 || (x%3)==0 || (x%5)==0)
it.remove();
}
*/
// per ogni k in setPrimi, tolgo da setPrimi i multipli m di k tali che m < k <= n
// RIGA 71
for(Integer k : setPrimi){
for(int m = 2*k ; m <= n ; m += k)
setPrimi.remove(new Integer(m));
}
// in setPrimi sono rimasti solamente i numeri primi p tali che 2 <= p <= n
for(Integer p : setPrimi)
System.out.print(p + " " );
System.out.println();
} // end main
} // end class
e mi da questo errore
codice:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$KeyIterator.next(Unknown Source)
at Eratostene2.main(Eratostene2.java:71)
come vedete, nel codice commentato, ho anche provato ad usare Iterator ma mi toglie i numeri fino ad un certo punto e poi sballa...
dov'č l'errore??