The forum of the Computer Science students of the University of Pisa

Soluzione esercitazione 18/03

Qualcuno può incollare qua la sua soluzione dell'esercitazione di oggi?
( [url=http://www.di.unipi.it/~giangi/CORSI/PR2/LEZIONI2015/Esercitazione2.html]http://www.di.unipi.it/~giangi/CORSI/PR2/LEZIONI2015/Esercitazione2.html[/url] )

MindFlyer

Codice: Seleziona tutto

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;
    }
    
}
Alessandro Antonelli
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:

Codice: Seleziona tutto

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).
}
MindFlyer
il Ferrari ha sottolineato che bisogna anche controllare in qualche modo che il parametro che gli viene passato non sia null (lanciando un'eccezione)
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.

Francesco Pieraccini
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?

MindFlyer
Essendo commenti, vengono ignorati dal compilatore. Servono solo a voi umani, per capire cosa fa una classe senza leggere tutto il sorgente.
Pandora Jewelry
Pandora Charms
Pandora Charms
Travis Scott Jordan 1
Air Jordans
Jordan 11s
Jordan 11
Jordans Shoes
Moncler Outlet
Off-White
Yeezy 450
Yeezy 500
Nike Outlet
Jordans 4
Jordan Retro 4
Jordan Shoes
Yeezy
Yeezy 700
Yeezy Supply
Off White Shoes
NFL Jerseys
Retro Jordans
Nike Air Jordan
Jordan Shoes
Jordans Shoes
Yeezy 350 V2
Adidas Yeezy
Yeezy
Yeezy 700
Nike Outlet
Yeezy Shoes
Yeezy Foam Runner
Nike Outlet
Nike Outlet
AJ1
UNC Jordan 1
Jordan 13
Jordan AJ 1
Yeezy Supply
Yeezy Zebra
Jordan 5
Jordan 1 Low
Air Jordans
Pandora Charms
Adidas UK
Nike Store
Adidas Yeezy Official Website
Yeezy 350
Jordan 1
Nike Outlet
YEEZY SUPPLY
Pandora Charms
Nike Shoes
Nike Outlet
Pandora Jewelry
Pandora Outlet
Jordan Shoes
Air Jordan 4
Pandora Charms
Adidas Yeezy
Air Jordan 11
Air Jordan 1
Nike Jordans
Jordan 1s
[Pandora Jewelry
Pandora Charms
Pandora Charms
Travis Scott Jordan 1
Air Jordans
Jordan 11s
Jordan 11
Jordans Shoes
Moncler Outlet
Off-White
Yeezy 450
Yeezy 500
Nike Outlet
Jordans 4
Jordan Retro 4
Jordan Shoes
Yeezy
Yeezy 700
Yeezy Supply
Off White Shoes
NFL Jerseys
Retro Jordans
Nike Air Jordan
Jordan Shoes
Jordans Shoes
Yeezy 350 V2
Adidas Yeezy
Yeezy
Yeezy 700
Nike Outlet
Yeezy Shoes
Yeezy Foam Runner
Nike Outlet
Nike Outlet
AJ1
UNC Jordan 1
Jordan 13
Jordan AJ 1
Yeezy Supply
Yeezy Zebra
Jordan 5
Jordan 1 Low
Air Jordans
Pandora Charms
Adidas UK
Nike Store
Adidas Yeezy Official Website
Yeezy 350
Jordan 1
Nike Outlet
YEEZY SUPPLY
Pandora Charms
Nike Shoes
Nike Outlet
Pandora Jewelry
Pandora Outlet
Jordan Shoes
Air Jordan 4
Pandora Charms
Adidas Yeezy
Air Jordan 11
Air Jordan 1
Nike Jordans
Jordan 1s
Pandora UK
Nike Jordan 1
Jordan 1
Yeezy Slides
Nike Air VaporMax
Nike Vapormax Flyknit
Air Jordan 1 Mid
Adidas yeezy
Adidas Yeezy
Yeezy 350
Nike Shoes
Nike Outlet
Yeezy
NFL Shop Official Online Store
Nike UK
Yeezy
Pandora UK
Nike Jordan 1
Jordan 1
Yeezy Slides
Nike Air VaporMax
Nike Vapormax Flyknit
Air Jordan 1 Mid
Adidas yeezy
Adidas Yeezy
Yeezy 350
Nike Shoes
Nike Outlet
Yeezy
NFL Shop Official Online Store
Nike UK
Yeezy
Yeezy 350