Classe Corrida:
public class Corrida {
public static final int QNTD_SAPOS = 5;
public static final int DISTANCIA_TOTAL = 500;
public static void main(String[] args) {
Sapo[] sapos = new Sapo[QNTD_SAPOS];
for (int i = 0; i < sapos.length; i++) {
sapos[i] = new Sapo("Sapo_" + (i+1), DISTANCIA_TOTAL);
sapos[i].start();
}
}
}
Classe Sapo:
private static final int MAXIMO_DESCANSO = 500;
private static final int MAXIMO_PULO = 50;
private static Object monitor = new Object();
private String nome;
private int distanciaTotal;
private int distanciaPercorrida;
private int ultimoPulo;
private static int colocacao;
public Sapo(String nome, int distanciaTotal) {
this.nome = nome;
this.distanciaTotal = distanciaTotal;
}
private void pular() {
ultimoPulo = (int) (Math.random() * MAXIMO_PULO);
distanciaPercorrida += ultimoPulo;
if(distanciaPercorrida > distanciaTotal) {
distanciaPercorrida = distanciaTotal;
}
}
private void avisarSituacao() {
System.out.println(nome + " pulou " + ultimoPulo + " cm. A distância percorrida foi de "
+ distanciaPercorrida + "cm!");
}
private void cruzarLinhaDeChegada() {
synchronized (monitor) {
colocacao++;
System.out.println("=> " + nome + " cruzou a linha de chegada em "
+ colocacao + "º lugar!");
}
}
private void descansar() {
int tempo = (int) (Math.random() * MAXIMO_DESCANSO);
try {
Thread.sleep(tempo);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (distanciaPercorrida < distanciaTotal) {
pular();
avisarSituacao();
descansar();
}
cruzarLinhaDeChegada();
}
O resultado na tela é sempre “SAPO_X + DISTÂNCIA_PULO. DISTANCIA_PERCORRIDA” até dar 500 e o sapo cruzar a linha de chegada. Quando isso acontece, o console imprime SAPO_X cruzou a linha de chegada em POSICAO lugar!
=> Quero criar um PLACAR para mostrar no FIM da execução o seguinte:
SAPO_X em POSICAO lugar!
SAPO_Y em POSICAO lugar!
SAPO_Z em POSICAO lugar!
