Mi stavo esercitando con i threads. Sto cercando di creare un semplice programmino
in cui due giocatori devono mangiare tutte le mele presenti nelle loro ceste. Il primo che
finisce vince.
Il codice è questo:
Cesto
Giocatorecodice:package GiocoDellaMela; /* * Classe che rappresenta un cesto pieno di mele, che * può essere svuotato dai giocatori. */ public class Cesto { private int mele; public Cesto(int mele) { this.mele = mele; } public int getMele() { return mele; } public void setMele(int mele) { this.mele = mele; } public void mangiaMela() { if(!meleFinite()) { mele--; } } public boolean meleFinite() { return mele == 0; } }
Gestorecodice:package GiocoDellaMela; import java.util.Random; /* * Classe che rappresenta un giocatore. * Il suo scopo è mangiare tutte le mele presenti * nel suo cesto prima degli altri giocatori. */ public class Giocatore implements Runnable { private String nome; private int meleMangiate; private Cesto cesto; private Random random = new Random(); public Giocatore(String nome, Cesto cesto) { this.nome = nome; meleMangiate = 0; this.cesto = cesto; } public void run() { while(!cesto.meleFinite()) { cesto.mangiaMela(); stampa(); attendi(); } } /* * Simula una pausa random tra una mela mangiata ed un'altra */ private void attendi() { //Genero un'attesa tra 400 e 2000 millisecondi int j = 400; int n = 2000 - j; int attesa = random.nextInt(n) + j; try { Thread.sleep(attesa); } catch (InterruptedException e) { System.out.println("Qualcosa è andato storto..."); } } public String stampa() { String s = "Il giocatore " + this.nome + " ha mangiato " + this.meleMangiate + " mele" + "\n"; return s; } }
Beh.. semplicemente se avvio il programma, non funziona. Comunque, una volta che avròcodice:package GiocoDellaMela; public class Gestore { public static void main(String[]args) { Cesto primoCesto = new Cesto(300); Cesto secondoCesto = new Cesto(300); Giocatore andrea = new Giocatore("Andrea", primoCesto); Giocatore loris = new Giocatore("Loris", secondoCesto); Thread andreaThread = new Thread(andrea); Thread lorisThread = new Thread(loris); andreaThread.start(); lorisThread.start(); try { andreaThread.join(); lorisThread.join(); } catch (InterruptedException e) { System.out.println("Qualcosa è andato storto..."); } } }
trovato il problema, come posso fare per capire quale dei due giocatori ha finito per primo le mele?

Rispondi quotando