|
|||||||
|
|
|
![]() |
|
|
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: 19:54.


















