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

codice:
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;
	}
}
Giocatore

codice:
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;
	}
}
Gestore

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...");
		}	
	}
}
Beh.. semplicemente se avvio il programma, non funziona. Comunque, una volta che avrò
trovato il problema, come posso fare per capire quale dei due giocatori ha finito per primo le mele?