Ciao a tutti...
avrei bisogno di una grossa mano, e purtroppo ho davvero poco tempo.
Dico subito che si tratta di un progetto per l'uni e che ne ho già svolto alcune parti(con alcuni buchi xò) e ora mi sono bloccato...
Ho creato le varie classi rifacendomi ad esercizi simili e ora praticamente non riesco a farle "comunicare"!
Vi posto il testo e poi vi spiego come ho cercato di muovermi:
Si vuole simulare una stazione di rifornimento carburante per automobili.
La stazione prevede 3 pompe, ognuna con il suo addetto:
1 per la benzina, 1 per il gasolio, 1 per il metano.
In totale si prevedono 50 automobilisti: 20 con macchine alimentate a
benzina, 20 con macchine Diesel e 10 con macchine bi-fuel benzina-metano.
Le macchine continuano a girare per tutta la simulazione e ogni tanto
vanno a fare rifornimento:
- quelle a benzina o a gasolio vanno a fare rifornimento dopo 400-500 ms.
- quelle bi-fuel, invece, dopo 300-400 ms.
Le macchine quando vanno a fare il rifornimento si mettono in una coda
ordinata alla pompa del proprio tipo di carburante.
Gli automobilisti delle autovetture bi-fuel preferiscono usare il piu`
economico metano (che e` quindi sempre la prima scelta), ma non
sopportano di stare in fila e, quando il tempo d'attesa supera i 50 ms
decidono di spostarsi su una pompa a benzina.
Il rifornimento comprende le seguenti operazioni.
- L'autista consegna le chiavi all'addetto (svegliandolo) della pompa.
- L'addetto fa il pieno (tempo tra 20 e 30 ms)
- L'addetto rida' le chiavi all'autista (svegliandolo) che se ne puo' andare
Dopo 30 secondi dall'inizio la simulazione finisce e vengono stampate
le statistiche sull'uso delle pompe, il tempio medio di attesa per
carburante e il numero di cambi coda delle automobili bi-fuel.
Ho creato le varie classi con i loro metodi:
Auto(penso con costruttore Auto(Alimentazione c) ma non so cm impostarlo)
Autista(penso con costruttore Autista(Auto a),derivato da Thread e stesso problema di sopra)
Pompa(con costruttore Pompa(String tipoCarburante), e in questa classe c dovrebbe essere la coda per decidere a che pompa mandare le auto)
Addetto(con costruttore Addetto(Pompa p), e derivato da Thread,si occupa di sincronizzare il rifornimento alla rispettiva pompa prelevando autisti dalla coda)
Stazione (non so proprio se serve, ma pensavo magari per coordinare tutto)
Stazione potrebbe avere un metodo che restituisce il vettore delle pompe...
Autista dovrebbe avere un metodo privato che seleziona la pompa:
int selezionaPompa(Pompa[] pompe)
In questo metodo si seleziona la pompa in base al carburante(vi posto il codice):
Codice:
class Auto {
public static final int Benzina = 0;
public static final int Gasolio = 1;
public static final int Metano = 2;
public static final int Bifuel = 3;
int alimentazione;
public int getAlimentazione()
{
return alimentazione;
}
// il costruttore è privato per fare in modo che possa essere chiamato solo con tipi di alimentazione validi
private Auto(int alimentazione)
{
this.alimentazione = alimentazione;
}
public static Auto AutoABenzina()
{
return new Auto(Benzina);
}
public static Auto AutoAGasolio()
{
return new Auto(Gasolio);
}
public static Auto AutoAMetano()
{
return new Auto(Metano);
}
public static Auto AutoBifuel()
{
return new Auto(Bifuel);
}
}
Ma se tengo conto di tutti i dubbi che ho credo proprio che non finirò mai.
Essenzialmente non ho idea di come mettere giù il codice dei punti elencati sopra..
Se volete vi posto il codice della classe Autista che ho fatto oppure se mi date la mail ve lo mando in privato...
Poi c'è anche da considerare che nn so con cosa gestire il tempo di durata della simulazione
Spero mi riusciate a illuminare..
Scusate se ho fatto confusione...per qualsiasi chiarimento sono qui..
(ah..nn posso usare busy waiting,polling..)
Grazie a tutti.
Ciao.
avrei bisogno di una grossa mano, e purtroppo ho davvero poco tempo.
Dico subito che si tratta di un progetto per l'uni e che ne ho già svolto alcune parti(con alcuni buchi xò) e ora mi sono bloccato...
Ho creato le varie classi rifacendomi ad esercizi simili e ora praticamente non riesco a farle "comunicare"!
Vi posto il testo e poi vi spiego come ho cercato di muovermi:
Si vuole simulare una stazione di rifornimento carburante per automobili.
La stazione prevede 3 pompe, ognuna con il suo addetto:
1 per la benzina, 1 per il gasolio, 1 per il metano.
In totale si prevedono 50 automobilisti: 20 con macchine alimentate a
benzina, 20 con macchine Diesel e 10 con macchine bi-fuel benzina-metano.
Le macchine continuano a girare per tutta la simulazione e ogni tanto
vanno a fare rifornimento:
- quelle a benzina o a gasolio vanno a fare rifornimento dopo 400-500 ms.
- quelle bi-fuel, invece, dopo 300-400 ms.
Le macchine quando vanno a fare il rifornimento si mettono in una coda
ordinata alla pompa del proprio tipo di carburante.
Gli automobilisti delle autovetture bi-fuel preferiscono usare il piu`
economico metano (che e` quindi sempre la prima scelta), ma non
sopportano di stare in fila e, quando il tempo d'attesa supera i 50 ms
decidono di spostarsi su una pompa a benzina.
Il rifornimento comprende le seguenti operazioni.
- L'autista consegna le chiavi all'addetto (svegliandolo) della pompa.
- L'addetto fa il pieno (tempo tra 20 e 30 ms)
- L'addetto rida' le chiavi all'autista (svegliandolo) che se ne puo' andare
Dopo 30 secondi dall'inizio la simulazione finisce e vengono stampate
le statistiche sull'uso delle pompe, il tempio medio di attesa per
carburante e il numero di cambi coda delle automobili bi-fuel.
Ho creato le varie classi con i loro metodi:
Auto(penso con costruttore Auto(Alimentazione c) ma non so cm impostarlo)
Autista(penso con costruttore Autista(Auto a),derivato da Thread e stesso problema di sopra)
Pompa(con costruttore Pompa(String tipoCarburante), e in questa classe c dovrebbe essere la coda per decidere a che pompa mandare le auto)
Addetto(con costruttore Addetto(Pompa p), e derivato da Thread,si occupa di sincronizzare il rifornimento alla rispettiva pompa prelevando autisti dalla coda)
Stazione (non so proprio se serve, ma pensavo magari per coordinare tutto)
Stazione potrebbe avere un metodo che restituisce il vettore delle pompe...
Autista dovrebbe avere un metodo privato che seleziona la pompa:
int selezionaPompa(Pompa[] pompe)
In questo metodo si seleziona la pompa in base al carburante(vi posto il codice):
Codice:
class Auto {
public static final int Benzina = 0;
public static final int Gasolio = 1;
public static final int Metano = 2;
public static final int Bifuel = 3;
int alimentazione;
public int getAlimentazione()
{
return alimentazione;
}
// il costruttore è privato per fare in modo che possa essere chiamato solo con tipi di alimentazione validi
private Auto(int alimentazione)
{
this.alimentazione = alimentazione;
}
public static Auto AutoABenzina()
{
return new Auto(Benzina);
}
public static Auto AutoAGasolio()
{
return new Auto(Gasolio);
}
public static Auto AutoAMetano()
{
return new Auto(Metano);
}
public static Auto AutoBifuel()
{
return new Auto(Bifuel);
}
}
Ma se tengo conto di tutti i dubbi che ho credo proprio che non finirò mai.
Essenzialmente non ho idea di come mettere giù il codice dei punti elencati sopra..
Se volete vi posto il codice della classe Autista che ho fatto oppure se mi date la mail ve lo mando in privato...
Poi c'è anche da considerare che nn so con cosa gestire il tempo di durata della simulazione
Spero mi riusciate a illuminare..
Scusate se ho fatto confusione...per qualsiasi chiarimento sono qui..
(ah..nn posso usare busy waiting,polling..)
Grazie a tutti.
Ciao.