Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoMartina Corona Modificato 9 anni fa
1
Ese 3 (del 31 Marzo 2004)
2
Testo Dare rappresentazione e realizzazione dei metodi della seguente classe QueueWithPriority. Nella risposta, non riportare i commenti della specifica. Realizzare la procedura stand-alone che, data una QueueWithPriority, la modifica rimuovendo tutti gli elementi con priorità massima.
3
Specifica
5
Implementazione Rappresentazione: usiamo un Vector per implementare la coda con priorita’, ogni elemento e’ una coppia consistente di una stringa ed un intero (serve un tipo ausiliario record). Il primo elemento della coda, quello con priorita’ massima ed inserito prima, e’ il primo elemento del vettore; le coppie sono ordinate di conseguenza Implementiamo i metodi di conseguenza Omettiamo la definizione del tipo eccezione EmptyException, checked (estende Exception)
6
Record class Pair { // OVERVIEW: un tipo record String value; int prior; // costruttore Pair (String s, int n) // EFFECTS: inizializza il “record” con i // valori di s ed n { value = s; prior = n;} }
7
Implementazione public class QueuewithPriority { // OVERVIEW: una QueueWithPriority è una coda con priorità, ossia una // collezione di oggetti (di tipo String) a cui è associata una priorità (un // numero). Gli elementi sono ordinati in modo decrescente in base alla // priorità e a parità di priorità in base all’ordine di inserimento // (con una politica first in first out). E` modificabile. private Vector els; \\ rappresentazione privata
8
public QueuewithPriority () { \\ EFFECTS: costruisce una QueuewithPriority vuota els=New vector();} public String first() throws EmptyException { \\ EFFECTS: se this e’ vuoto solleva EmptyException, altrimenti \\ restituisce il primo elemento di this if (els.size()==0) {throw new EmptyException(“vuota”);}; Pair p= (Pair) els.get(0); return p.value;}
9
public int max() throws EmptyException { \\ EFFECTS: se this e’ vuoto solleva EmptyException, altrimenti \\ restituisce la priorita’ massima presente in this if (els.size()==0) {throw new EmptyException(“vuota”);}; Pair p= (Pair) els.get(0); return p.prior;} public void dequeue() throws EmptyException { \\ MODIFIES: this \\ EFFECTS: se this e’ vuoto solleva EmptyException, altrimenti \\ rimuove il primo elemento di this if (els.size()==0) {throw new EmptyException(“vuota”);}; els.remove(0);}
10
public void enqueue(String x, int p) ) throws NullPointerException { \\ MODIFIES: this \\ EFFECTS: se x e’ null solleva NullPointerException, altrimenti \\ inserisce x in this con priorita’ p if (x==null) {throw new NullPointerException(“null”);}; Pair z=new Pair (x,p); els.add(z); if (els.size() <=1) {return;}; int i=els.size()-2; while (i >=0) { Pair q=(Pair) els.get(i); if (q.prior>=z.prior) {return;}; els.set(i+1,q); els.set(i,z); i--;} }
11
Procedura stand-alone Scritta vedendo solo la specifica di QueuewithPriority (non vediamo la rappresentazione, ovvero la variabile d’istanza els di tipo Vector) Gestiamo le eccezioni che possono essere sollevate dai metodi della classe (EmptyException) mediante try e catch EmptyException e’ checked, potrebbe essere propagata solo se messa nell’intestazione Mascheriamo le eccezioni, se non ci sono elementi non modifica la coda
12
Procedura stand-alone public static void removemax(QueuewithPriority p) { \\MODIFIES:p \\ EFFECTS: rimuove tutti gli elementi di priorita’ pari alla massima da p if (p==null) {return;}; int i; try{i=p.max()} catch(EmptyException) {return;} p.dequeue(); try{ while (p.max()== i) {p.dequeue();}} catch (EmptyException) {return;} }
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.