PDA

View Full Version : [JAVA] Help esercizio.


Dr Jackall
16-04-2006, 16:57
Salve a tutti! Qualcuno mi potrebbe dare un consiglio su come svolgere questo esercizio nel migliore dei modi?

La mia domanda è: posso risolverlo usando semplicemente queste due code senza una lista di appoggio? E se si, come?

Non chiedo il codice completo, anche qualche suggerimento è ben accetto! Grazie!


Siano date 2 code Q1 e Q2 contenenti rispettivamente oggetti di tipo “Impiegati” e “Dipartimenti”.
La classe “Impiegati” contiene il Dipartimento di afferenza di ogni impiegato.
La classe “Dipartimenti” contiene il campo “Numero_Totale_Impiegati” inizialmente vuoto.
Si richiede di aggiornare i dati della coda Q2 relativamente al numero di impiegati di ciascuna
struttura dati della coda Q1.
(Opzionale: Alla fine dell’aggiornamento inserire in una coda Q3, la coppia (Dipartimento, Lista
impiegati))

andbin
16-04-2006, 17:32
Dovresti specificare in quale linguaggio. ;)

Dr Jackall
16-04-2006, 17:38
Java! :D

andbin
16-04-2006, 17:52
Ok, quale classe usi o vorresti usare per le code?
Se usi Java 5.0 potresti usare la classe LinkedList che implementa l'interfaccia Queue. Puoi quindi vedere questa LinkedList come una coda (usi peek(), poll(), offer() ) ma anche come una lista che puoi scansionare elemento per elemento usando un iteratore.

Dr Jackall
16-04-2006, 18:01
Beh diciamo che la mia classe coda è

class coda
{
private nodo testa;
private nodo coda;

// costruttore
// inizialmente la coda è vuota
public coda()
{
testa=null;
coda=null;
}

// test per controllare se la coda è vuota
public boolean isEmpty()
{
return (testa==null);
}


// inserire un elemento in coda
public void enqueue(Object A)
{
if (isEmpty()) // stiamo inserendo il primo elemento la coda era vuota
{
nodo daInserire=new nodo(A);
testa=daInserire;
coda=daInserire;
}
else // ci sono già elementi
{
nodo daInserire=new nodo(A);
coda.setNext(daInserire);
coda=daInserire;
}
}

// togliere un elemento dalla testa
public Object dequeue()
{
try // l'estrazione avviene solo se la coda non è vuota
{
if (isEmpty()) throw new Exception("coda vuota, nessuna estrazione effettuata");
else {
Object temp=testa.getInfo();
testa=testa.getNext();
return temp;
}
}
catch(Exception e){System.out.println(e.getMessage());
return null;}

}

// leggere l'elemento dalla testa senza estrarlo
public Object readHead()
{
try // la lettura avviene solo se la coda non è vuota
{
if (isEmpty()) throw new Exception("coda vuota, nessuna lettura possibile");
else return testa.getInfo();
}
catch(Exception e){System.out.println(e.getMessage());
return null;}

}

// svuotare la coda
public void clear()
{
testa=null;
coda=null;
}

// comodità non necessaria ma utile
public String toString()
{
String temp="la coda è:<";
nodo corrente=testa;
while(corrente!=null)
{
temp=temp+corrente.getInfo()+"+";
corrente=corrente.getNext();
}
return temp+">";
}

}

Non posso usare interfacce o metodi particolari di java, solamente Liste linkate semplici e code di questo tipo. :)

andbin
16-04-2006, 18:19
Non posso usare interfacce o metodi particolari di java, solamente Liste linkate semplici e code di questo tipo. :)Ok, allora puoi "dotare" la tua classe coda dei metodi utili per scansionare la coda in modo sequenziale.
Occhio solo che la tua coda è un contenitore di Object e quindi può contenere, in teoria, qualunque cosa. Devi usare dei cast opportuni per poter estrarre degli oggetti specifici “Impiegati” e “Dipartimenti” (che suppongo siano implementati ognuno come una classe).

Dr Jackall
16-04-2006, 18:55
Ok, allora puoi "dotare" la tua classe coda dei metodi utili per scansionare la coda in modo sequenziale.
Occhio solo che la tua coda è un contenitore di Object e quindi può contenere, in teoria, qualunque cosa. Devi usare dei cast opportuni per poter estrarre degli oggetti specifici “Impiegati” e “Dipartimenti” (che suppongo siano implementati ognuno come una classe).

Non ci avevo pensato! :eek:

Grazie mille! :D