Thread

Pessoal, estou iniciando em threads e tenho um exercício pra fazer que está tirando meu sono, gostaria da ajuda de quem puder, o exercício é o seguinte: Cinco lebres disputarão uma corrida. Cada lebre pode dar um salto que varia de 1 a 3 metros de distância. A distancia percorrida é de 20 metros. Na corrida, cada lebre dará um salto, informar quantos metros ela pulou a cada salto realizado. Em seguida, a lebre pára para descansar (yield()). Escreva um programa, utilizando threads (uma para cada lebre), que informe a lebre vencedora e a colocação de cada uma delas no final da corrida. Informar também quantos pulos cada uma delas deu.

Fiz somente com duas lebres, você pode usar essa logica e fazer com mais lebres. Ve se confere:
A seta >, significa os pulos. Você pode tambem fazer com metodos saparadamente, fiz somente dentro do run, o que acho mais difiicl. Você pode fazer com que o metodo run execute so os passos iniciais.


package corrida_lebres;
import java.util.Random;
import java.util.Scanner;
//Jonas Barros
public class Lebres implements Runnable{
  private final String nome;  
  private static int opcao;
  public Lebres (String nome){
    this.nome = nome;
  }   
  Random rand = new Random();
  int pulos;
  String p = " ";
  private static int soma_pulos = 0;
  int qtd_pulos = 0;
  private static int verifica_vencedor = 1;
  @Override
  public void run() {
    do {
       pulos = rand.nextInt(3);
       if((pulos >= 1 ) && (pulos <= 3)){ 
        soma_pulos = soma_pulos + pulos;
        qtd_pulos++;
        p += " ► ";
        System.out.println("Pulo em metro   "+pulos+" -  Distancia já percorrida  - "+soma_pulos+" metros");
        System.out.println(nome + p +"\n\n");
        if ((soma_pulos >= 20) && (soma_pulos <= 23)){
            System.out.println(nome+" ganhou com "+qtd_pulos+" pulos!"); 
            verifica_aposta();
        }
        verifica_vencedor++;
        try {
              Thread.sleep(500);
          } catch (InterruptedException ex) {
              System.out.println("Ops!");
          }
      }
    } while (soma_pulos < 21);
          Thread.yield();
  }
  public void verifica_aposta() {
      switch(opcao){
        case 1:
            if ((verifica_vencedor % 2 == 1)){
                 System.out.println("Você ganhou");      
            }else { System.out.println("Você perdeu!"); 
            } System.exit(0);
        case 2: 
            if ((verifica_vencedor % 2 == 0)){
                 System.out.println("Você ganhou!");                
            }  else {System.out.println("Você perdeu!");
            } System.exit(0);   
    }
      System.exit(0); 
  }
    public static void main(String[] args) {
    Scanner entrada = new Scanner(System.in);
    System.out.println("----------------------");
    System.out.println("FAÇA SUA APOSTA");
    System.out.println("1 para apostar na Lebre 1");
    System.out.println("2 para apostar na Lebre 2");
    opcao = entrada.nextInt();    
    Lebres lebre1 = new Lebres("Lebre 1");
    Thread t1 = new Thread(lebre1);
    t1.start();    
    Lebres  lebre2 = new Lebres("Lebre 2");
    Thread t2 = new Thread(lebre2);
    t2.start();
    }
}


1 curtida