avevo come esercizio quello di costruire un crivello di eratostene. ok, ci sono sul crivello.
dovevo crearlo con TreeSet, LinkedList e ArrayList.
Il TreeSet va tutto bene, stampa e procede come avevo in mente:
AL e LL non stampano nulla, vuoto:codice:package eratostene; import java.util.*; public class CrivelloSet extends CrivelloAstratto{ private Set<Integer> crivello=new LinkedHashSet<Integer>(); private Set<Integer> primi=new LinkedHashSet<Integer>(); private final int N; public CrivelloSet(int N){ if(N<2) throw new RuntimeException("N minore di 2"); this.N=N; for(int i=2; i<=N; i++) crivello.add(i); } public int size(){ return primi.size(); } public void filtra(){ while(!crivello.isEmpty()){ //estrazione del minimo crivello int minimo=crivello.iterator().next(); primi.add(minimo); //eliminazione del minimo e dei suoi multipli int multiplo=minimo; while(multiplo<=N){ crivello.remove(multiplo); multiplo=multiplo+minimo; } } } public Iterator<Integer> iterator(){ return primi.iterator(); } public static void main(String[]args){ CrivelloSet cE=new CrivelloSet(1000); cE.filtra(); System.out.println(cE); } }
LL
ALcodice:package eratostene; import java.util.*; public class CrivelloLL extends CrivelloAstratto{ private LinkedList<Integer> crivello=new LinkedList<Integer>(); private LinkedList<Integer> primi=new LinkedList<Integer>(); private final int N; public CrivelloLL(int N){ if(N<2) throw new RuntimeException("N minore di 2"); this.N=N; for(int i=0; i<=N; i++) crivello.add(i); } public int size(){ return crivello.size(); } public void filtra(){ while(!(crivello.isEmpty())){ int minimo=crivello.listIterator().next(); primi.add(minimo); int multiplo=minimo; while(multiplo<=N){ crivello.remove(new Integer(multiplo)); multiplo=multiplo+minimo; } } } public ListIterator<Integer> listiterator(){ return crivello.listIterator(); } public static void main(String[]args){ Crivello cE=new CrivelloLL(1000); cE.filtra(); System.out.println(cE); } @Override public Iterator<Integer> iterator() { // TODO Auto-generated method stub return null; } }
DOMANDE:codice:public CrivelloAL(int N){ if(N<2) throw new RuntimeException("N minore di 2"); this.N=N; for(int i=0; i<=N; i++) crivello.add(i); } public int size(){ return crivello.size(); } public void filtra(){ while(!crivello.isEmpty()){ int minimo=crivello.iterator().next(); primi.add(minimo); int multiplo=minimo; while(multiplo<=N){ crivello.remove(new Integer(multiplo)); multiplo=multiplo+minimo; } } } public Iterator<Integer> iterator(){ return primi.iterator(); } public static void main(String[]args){ Crivello cE=new CrivelloAL(1000); cE.filtra(); System.out.println(cE); } }
perchè se faccio:da errore? Esiste il metodocodice:crivello.remove(multiplo);quindi perchè da errore?codice:Object remove(int index)
a questo punto non potrei fare:? poichè la remove restitusce proprio l'oggetto relativo all'indice..codice:primi.add(crivello.remove(multiplo));
comunque il criterio è semplice, sposto i primi su un AL o LL primi togliendoli da un AL o LL crivello.

Rispondi quotando