Soluzione esercitazione 18/03

YmirYmir Posts: 183
edited March 2015 in Programmazione II
Qualcuno può incollare qua la sua soluzione dell'esercitazione di oggi?
( http://www.di.unipi.it/~giangi/CORSI/PR2/LEZIONI2015/Esercitazione2.html )

Comments

  • MindFlyerMindFlyer Posts: 436
    edited March 2015
    Faccio il 2 (senza usare gli Iterator...):

    import java.util.*;
    
    public class VectorIntegerCollection implements IntegerCollection{
       
        private Vector<Integer> v;
    
        public VectorIntegerCollection(){
            v = new Vector<Integer>();
        }
        
       public int occurrences(Integer elem) throws NullPointerException{
            int n = 0;
            if(elem == null) throw new NullPointerException();
            for(int i = 0; i < v.size(); i++)
                if(v.elementAt(i).equals(elem)) n++; 
            return n;
        }
    
        public int size(){
            return v.size();
        }
    
        public void insert(Integer elem) throws NullPointerException{
            if(elem == null) throw new NullPointerException();
            v.addElement(elem);
        }
    
        public Integer extractMax() throws NoSuchElementException{
            Integer max = v.firstElement(); // may throw NoSuchElementException
            for(int i = 1; i < v.size(); i++)
                if(v.elementAt(i).compareTo(max) > 0)
                    max = v.elementAt(i);
            v.remove(max);
            return max;
        }
        
    }
    
  • Mi pare che a lezione sia stato fatto così, aggiungo solo che per i metodi occurrencies ed insert il Ferrari ha sottolineato che bisogna anche controllare in qualche modo che il parametro che gli viene passato non sia null (lanciando un'eccezione), per una questione di programmazione difensiva. Altra stupidaggine: non ricordo la API ma credo che alla remove della classe vector vada passato l'indice, non il valore.

    Il punto 1 io lo avevo fatto così, mi pare che più o meno fosse quello che voleva ma non vi assicuro sia perfetto:
     public interface IntegerCollection {
    
       // OVERVIEW: IntegerCollection si usa per rappresentare una collezione mutabile di oggetti di tipo Integer
    
       public int occurrences(Integer elem);
    	//REQUIRES: elem deve essere diverso da null
    	//EFFECTS: se elem è contenuto nella collezione restituisce il conteggio delle occorrenze; altrimenti restituisce 0
    
       public int size( );
    	//REQUIRES: niente
    	//EFFECTS: restituisce il numero di elementi nella collezione (0 se vuota)
    
       public void insert(Integer elem);
    	//REQUIRES: elem deve essere diverso da null
    	//EFFECTS: l'elemento elem diventa parte della collezione
    
       public Integer extractMax( );
    	//REQUIRES: la collezione non è vuota (size > 0)
    	//EFFECTS: restituisce ed elimina dalla collezione l'elemento massimo (se ce n'è più di uno, quello eliminato è uno qualunque).
    }
    
  • MindFlyerMindFlyer Posts: 436
    edited March 2015
    per i metodi occurrencies ed insert il Ferrari ha sottolineato che bisogna anche controllare in qualche modo che il parametro che gli viene passato non sia null (lanciando un'eccezione), per una questione di programmazione difensiva.
    Grazie, ho aggiunto l'eccezione.


    non ricordo la API ma credo che alla remove della classe vector vada passato l'indice, non il valore.

    Si può passare sia l'indice che un valore. Nel secondo caso viene rimossa la prima occorrenza di quel valore. Sarebbe più efficiente ricordarsi l'indice di un elemento massimo durante la scansione, ma ho optato per la brevità del codice a scapito dell'efficienza.
  • edited March 2015
    Scusate, domanda forse stupida, ma non avendolo seguito molto ultimamente mi son perso alcune cose: il codice lo vuole commentato in quel modo con overview, requires ed effects? E c'è un qualche scopo o è solo per renderlo chiaro?
  • MindFlyerMindFlyer Posts: 436
    edited March 2015
    c'è un qualche scopo o è solo per renderlo chiaro?

    Essendo commenti, vengono ignorati dal compilatore. Servono solo a voi umani, per capire cosa fa una classe senza leggere tutto il sorgente.
  • Scusate, domanda forse stupida, ma non avendolo seguito molto ultimamente mi son perso alcune cose styliste wax: il codice lo vuole commentato in quel modo con overview, requires ed effects? E c'è un qualche scopo o è solo per renderlo chiaro?

    Credo che tutto ciò che intraprendiamo è sempre uno scopo.

Sign In or Register to comment.