Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Crivello di Eratostene, con AL, LL e TS. problema output con AL e LL

    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:
    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);
    	}
    }
    AL e LL non stampano nulla, vuoto:

    LL
    codice:
    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;
    	}
    
    
    }
    AL
    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);
    	}
    
    
    }
    DOMANDE:

    perchè se faccio:
    codice:
    crivello.remove(multiplo);
    da errore? Esiste il metodo
    codice:
    Object remove(int index)
    quindi perchè da errore?
    a questo punto non potrei fare:
    codice:
    primi.add(crivello.remove(multiplo));
    ? poichè la remove restitusce proprio l'oggetto relativo all'indice..

    comunque il criterio è semplice, sposto i primi su un AL o LL primi togliendoli da un AL o LL crivello.

  2. #2
    non dovrebbe essere normale usare
    codice:
    remove(int index);
    invece di

    codice:
    remove(new Integer(int index));
    ???
    per l'autoboxing intendo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.