|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
[java] help elaborato
Ciao a tutti ragazzi ho bisogno di voi... oggi il prof mi ha voluto assegnare un elaborato java che consiste in questo:
c'è una strada a doppio senso ma a un certo punto c'è una strettoia e possono passare le macchine in unico senso e per di più entro questa strettoia c'è la limitazione che + di "n" macchine non ci possono passare! Chiaramente devo evitare deadlock e starvation! ora mi chiedevo: meglio usare i metodi syncronized oppure i semafori? considerate ragazzi che non ho mai fatto programmazione a oggetti quindi se avete anche delle dispense mi farebbero comodo, ho scaricato il manuale gratuito java ma... ![]() il top sarebbe eseguirlo graficamente! che mi dite? grazie in anticipo ![]()
__________________
Ho concluso felicemente molte trattative su questo forum! |
![]() |
![]() |
![]() |
#2 | ||
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Ciao!
Quote:
![]() Quote:
![]()
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
||
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
si ho fatto il wait e notify
![]() tra l'altro usassi il notify non importerebbe mica usare il notify all?
__________________
Ho concluso felicemente molte trattative su questo forum! |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
no no....tu intendi il metodo della classe Object???
Io ti dicevo proprio di implementarlo per conto tuo...per esempio la wait: Codice:
public void wait(int semaforo) { while(semaforo <= 0) { ; // non fa niente } semaforo--; } Codice:
public void signal(int semaforo) { semaforo++; }
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
ahh ok
![]() il top sarebbe fare anche un'animazione solo che nn so da che parte rifarmi...che dici? è impossibile?
__________________
Ho concluso felicemente molte trattative su questo forum! |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Quote:
impossibile non è!!!però trovo già di per se abbastanza complicato integrare al programma vero e proprio, l'interfaccia utente e/o la grafica. In questo caso rischi di impelagarti in situazioni tipo: "La grafica riproduce fedelmente il problema - qui non sembra funzionare niente - il problema deve essere l'implementazione del programma" quando invece già la grafica ha i suoi problemi di gestione. Cmq se proprio vuoi un punto da cui partire, inizia dal tutorial java della sun e vai al trail "gui with JFC/SWING" (o una cosa del genere) e poi vai giù di fantasia!!! ![]()
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
penso che mi limiterò all'implementazione del solo programma ammesso mi riesca dato che non ci metto le mani
![]()
__________________
Ho concluso felicemente molte trattative su questo forum! |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
|
Ragazzi ho terminato l'elaborato ma mi manca una cosa... una volta terminato volevo che comparisse la scritta: le macchine non possono + passare perchè i ponte è crollato....solo che non la inserisco nel punto giusto e mi compare + di una volta...
questo è il codice: (nn fate caso al commento del try catch che era na prova ![]() Codice:
import java.io.*;// inporto tutte le classi java.io // l'oggetto Ponte è condiviso dai thread // delle classi autoN e autoS class Ponte{ private int cont; private boolean autoN; private boolean autoS; private int num_auto; // Costruttore della classe Ponte public Ponte(int n){ this.num_auto = n; cont = 0; autoN = false; autoS = false; } //metodo sincronizzato sull'oggetto Ponte public synchronized void entraN(){ // entra in wait nel caso che nel ponte siano presenti while(autoS == true || cont >= num_auto){ //macchine provenienti da sud oppure se la capienza try{ //max sia stata superata wait(); } catch(InterruptedException ie){} } cont++; autoN = true; } //metodo sincronizzato sull'oggetto Ponte public synchronized void entraS(){ while(autoN == true || cont >= num_auto){ // entra in wait nel caso che nel ponte siano presenti try{ //macchine provenienti da nord oppure se la capienza wait(); //max sia stata superata } catch(InterruptedException ie){} } cont++; autoS = true; } //metodo sincronizzato sull'oggetto Ponte public synchronized void esceN(){ cont--; notify(); // risveglio comunque un thread per ogni macchina che esce. Il thread poi // provvederà a verificare se ci sono le condizioni per entrare sul ponte if(cont == 0){ autoN = false; System.out.println("Adesso sul ponte non sono presenti macchine"); notifyAll(); // nel caso del ponte vuoto risveglio tutti i thread } } //metodo sincronizzato sull'oggetto Ponte public synchronized void esceS(){ cont--; notify(); // risveglio comunque un thread per ogni macchina che esce. Il thread poi // provvederà a verificare se ci sono le condizioni per entrare sul ponte if(cont == 0){ autoS = false; System.out.println("Adesso sul ponte non sono presenti macchine"); notifyAll(); // nel caso del ponte vuoto risveglio tutti i thread } } } class autoN extends Thread{ private Ponte ponte; private int id; private int count; //costruttore della classe autoN public autoN(Ponte ponte, int id){ count=0; this.ponte=ponte; this.id=id; } public void run(){ while(count<7){ ponte.entraN(); entra(); ponte.esceN(); count++; ferma(); } } public void entra(){ System.out.println("L'auto "+id+" da nord entra."); try{ Thread.sleep(1000-10*id); //tempo arbitrario di attesa della singola macchina } // all'interno del ponte catch(InterruptedException ie){} } public void ferma(){ try{ Thread.sleep(1000-10*id); // attesa arbitraria all'uscita del ponte } catch(InterruptedException ie){} } } class autoS extends Thread{ private Ponte ponte; private int id; private int count; public autoS(Ponte ponte, int id){ count=0; this.ponte=ponte; this.id=id; } public void run(){ // numero arbitrario di volte che una certa macchina può attraversare il ponte //try { while(count<7){ ponte.entraS(); entra(); ponte.esceS(); count++; ferma(); if ( count==7) {System.out.println(" Il ponte è crollato e non possono passare più macchine"); } // } // catch( Exception e) // {} // finally { // System.out.println(" Il ponte è crollato e non possono passare più macchine"); // } } } public void entra(){ System.out.println("L'auto "+id+" da sud entra."); try{ Thread.sleep(1000-10*id); //tempo arbitrario di attesa della singola macchina } // all'interno del ponte catch(InterruptedException ie){} } public void ferma(){ try{ Thread.sleep(1000-10*id); // attesa arbitraria all'uscita del ponte } catch(InterruptedException ie){} } } public class Automobile{ private static BufferedReader input = new BufferedReader(new InputStreamReader( System.in ) ); public static void main(String[] args){ int n=0; int k=0; int h=0; System.out.print("Inserisci di seguito il numero di macchine che possono stare contemporaneamente sul ponte: "); try{ n = Integer.parseInt(input.readLine()); // acquisizione da linea di comando } catch(IOException ioe){} System.out.print("Inserisci il numero di macchine che partono da nord e vanno in direzione sud: "); try{ k = Integer.parseInt(input.readLine()); } catch(IOException ioe){} System.out.print("Inserisci il numero di macchine che partono da sud e vanno in direzione nord: "); try{ h = Integer.parseInt(input.readLine()); } catch(IOException ioe){} Ponte ponte = new Ponte(n); for(int i=0; i<=k; i++){ autoN nord = new autoN(ponte,i); nord.start(); } for(int i=0; i<h; i++) { autoS sud = new autoS(ponte,i); sud.start(); } } }
__________________
Ho concluso felicemente molte trattative su questo forum! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:15.