Loteria
package frontend;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.IntStream;
public class Tela {
static Scanner ler = new Scanner(System.in);
static String finalizarPrograma = "N";
// static int quantidadeDeNumerosApostados = 6;
// static double valorDaAposta = 0;
// static int[] numerosApostados;
// static int[] numerosSorteados;
// static String confirmaValorDaAposta = "N";
static String confirmaApostaSimOuNao = "N";
// static String retornarAoMenuPrincipal;
// static String retornaAoMenuPrincipalSimOuNao = "N";
// static String confirmaNumerosDaAposta = "";
public static void main(String[] args) {
String opcaoDoMenuPrincipal;
do {
System.out.println(":: MENU PRINCIPAL ::");
System.out.println("[F]azer aposta");
System.out.println("[R]ealizar sorteio");
System.out.println("[S]air");
System.out.print("=> Digite a opcao desejada: ");
opcaoDoMenuPrincipal = ler.nextLine().toUpperCase();
exibeOpcoesDoMenuPrincipal(opcaoDoMenuPrincipal);
} while (finalizarPrograma.equals("N"));
}
public static void exibeOpcoesDoMenuPrincipal(String opcaoDoMenuPrincipal) {
switch (opcaoDoMenuPrincipal) {
case "F":
while (confirmaApostaSimOuNao.equals("S")) {
System.out.println("\n:: Aposta já realizada. Deseja refaze-la? [S]im / [N]ao: ");
String refazerApostaSimOuNao = ler.nextLine().toUpperCase();
escolheSeVaiRefazerAposta(refazerApostaSimOuNao);
}
fazerAposta();
escolheNumerosDaAposta(quantidadeDeNumerosApostados);
break;
case "R":
realizarSorteio(1, 60, quantidadeDeNumerosApostados);
break;
case "S":
finalizarPrograma = "S";
break;
default:
System.out.println("\n:: Opcao invalida. Tente novamente...\n");
break;
}
}
public static void escolheSeVaiRefazerAposta(String refazerApostaSimOuNao) {
switch (refazerApostaSimOuNao) {
case "S":
break;
case "N":
confirmaNumerosDaAposta = "N";
break;
default:
System.out.println(":: Opcao invalida. Tente novamente...\n");
break;
}
}
public static void confirmaAposta(String confirmaApostaSimOuNao) {
switch (confirmaApostaSimOuNao) {
case "S":
confirmaValorDaAposta = "S";
break;
case "N":
confirmaValorDaAposta = "N";
System.out.print("=> Retornar ao Menu Principal? [S]im / [N]ao: ");
retornaAoMenuPrincipalSimOuNao = ler.nextLine().toUpperCase();
escolheSeRetornaAoMenuPrincipal(retornarAoMenuPrincipal);
break;
default:
System.out.println("\n:: Opcao invalida. Tente novamente...\n");
break;
}
}
public static void escolheSeRetornaAoMenuPrincipal(String retornarAoMenuPrincipalSimOuNao) {
switch (retornaAoMenuPrincipalSimOuNao) {
case "S":
retornaAoMenuPrincipalSimOuNao = "S";
break;
case "N":
retornaAoMenuPrincipalSimOuNao = "N";
break;
default:
System.out.println("\n:: Opcao invalida. Tente novamente...\n");
break;
}
}
public static void fazerAposta() {
do {
System.out.println(":: FAZER APOSTA ::");
System.out.println("nº Valor Sena Quina Quadra");
System.out.println("6 4,50 50.063.860 154.518 2.332");
System.out.println("7 31,50 7.151.980 44.981 1.038");
System.out.println("8 126,00 1.787.995 17.192 539");
System.out.println("9 378,00 595.998 7.791 312");
System.out.println("10 945,00 238.399 3.973 195");
System.out.println("11 2.079,00 108.363 2.211 129");
System.out.println("12 4.158,00 54.182 1.317 90");
System.out.println("13 7.722,00 29.175 828 65");
System.out.println("14 13.513,50 16.671 544 48");
System.out.println("15 22.522,50 10.003 370 37");
System.out.print("=> Selecione a quantidade de numeros da aposta: ");
while (!ler.hasNextInt()) {
System.out.print("\n=> Escolha só numeros entre 6 e 15 e aperte ENTER...");
ler.next();
}
quantidadeDeNumerosApostados = ler.nextInt();
while (quantidadeDeNumerosApostados < 6 || quantidadeDeNumerosApostados > 15) {
System.out.print("\n:: Escolha numeros entre 6 e 15 e aperte ENTER...");
quantidadeDeNumerosApostados = ler.nextInt();
}
while (confirmaValorDaAposta.equals("N")) {
defineValorDaAposta(quantidadeDeNumerosApostados);
System.out.println(":: Valor para " + quantidadeDeNumerosApostados + " numeros: R$ " + valorDaAposta);
System.out.print("=> Confirma aposta? [S]im / [N]ao: ");
confirmaApostaSimOuNao = ler.nextLine().toUpperCase();
confirmaAposta(confirmaApostaSimOuNao);
}
escolheNumerosDaAposta(quantidadeDeNumerosApostados);
} while (confirmaValorDaAposta.equals("N"));
}
public static double defineValorDaAposta(int quantidadeDeNumerosApostados) {
switch (quantidadeDeNumerosApostados) {
case 6: valorDaAposta = 4.50; break;
case 7: valorDaAposta = 31.50; break;
case 8: valorDaAposta = 126.00; break;
case 9: valorDaAposta = 378.00; break;
case 10: valorDaAposta = 945.00; break;
case 11: valorDaAposta = 2079.00; break;
case 12: valorDaAposta = 4158.00; break;
case 13: valorDaAposta = 7722.00; break;
case 14: valorDaAposta = 13513.50; break;
case 15: valorDaAposta = 22522.50; break;
}
return valorDaAposta;
}
public static int[] escolheNumerosDaAposta(int quantidadeDeNumerosApostados) {
do {
numerosApostados = new int[quantidadeDeNumerosApostados];
for(int i = 0; i < quantidadeDeNumerosApostados;){
int[] numerosApostadosSemZero = Arrays.stream(numerosApostados).filter(j -> j != 0).toArray();
if (i != 0) {
System.out.println("\n:: Numeros apostados: " + Arrays.toString(numerosApostadosSemZero));
}
System.out.print("=> Digite o " + (i + 1) + "º numero, de 1 a 60 (sem repeti-los): ");
numerosApostados[i] = ler.nextInt();
while (numerosApostados[i] < 1 || numerosApostados[i] > 60) {
System.out.println("=> Escolha apenas entre 1 e 60 e aperte ENTER...");
numerosApostados[i] = ler.nextInt();
}
i++;
}
confirmaNumerosDaAposta = "S";
} while (confirmaNumerosDaAposta.equals("N"));
return numerosApostados;
}
public static int[] realizarSorteio(int minimo, int maximo, int quantidadeDeNumerosSorteados) {
do {
numerosSorteados = new int[quantidadeDeNumerosSorteados];
for (int i = 0; i < numerosSorteados.length; i++) {
// Gera numeros aleatorios mais aleatorios que o Math.Random, na minha opiniao
Random numeroAleatorio = ThreadLocalRandom.current();
int numeroSorteado = numeroAleatorio.nextInt(maximo) + minimo;
// Atribui ele ao array numerosSorteados
numerosSorteados[i] = numeroSorteado;
// Retira o indice com zero (nao inicializado) do array numerosSorteados
int[] numerosSorteadosSemZero = Arrays.stream(numerosSorteados).filter(j -> j != 0).toArray();
// Retira os numeros repetidos e mantem a ordenacao
int[] numerosNaoRepetidos = IntStream.of(numerosSorteadosSemZero).distinct().toArray();
// Se há diferenca entre os arrays pela exclusao de numero repetido, gerar novo numero aleatorio
if (numerosSorteadosSemZero.length - numerosNaoRepetidos.length != 0) {
numeroSorteado = numeroAleatorio.nextInt(maximo) + minimo;
numerosSorteados[i] = numeroSorteado;
}
}
} while (confirmaNumerosDaAposta.equals("S"));
System.out.println("\n:: Você ainda nao fez a aposta. Voltando para o menu principal...\n");
return numerosSorteados;
}
//public static void resultadoFinal(int[] numerosApostados, int[] numerosSorteados) {
//}
}INFO