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) {
//}
}
package frontend;
import java.util.Arrays;
import java.util.Locale;
import java.util.Scanner;
import java.util.stream.IntStream;
public class Tela2 {
// Sufixo dos nomes das variaveis e metodos: exibe, seleciona, envia, confirma, verifica, compara...
// Declaracao de variaveis que serao usadas entre as paginas
static Scanner ler = new Scanner(System.in);
static int quantidadeDeNumerosAApostar = 0;
static double valorDaAposta;
static int[] numerosApostados;
static int[] numerosApostadosNaoRepetidos;
// O velho e bom metodo main
public static void main(String[] args) {
exibeMenuPrincipal();
}
public static void exibeMenuPrincipal() {
System.out.println("");
System.out.println("==================================================");
System.out.println("| MENU PRINCIPAL |");
System.out.println("|================================================|");
System.out.println("| [F]azer aposta |");
System.out.println("| [R]ealizar sorteio |");
System.out.println("| [S]air |");
System.out.println("==================================================");
selecionaOpcoesDoMenuPrincipal();
}
public static void selecionaOpcoesDoMenuPrincipal() {
System.out.print("=> Digite a opcao desejada: ");
char opcoesDoMenuPrincipal = ler.next().toUpperCase().charAt(0);
switch (opcoesDoMenuPrincipal) {
case 'F':
exibeTelaDeApostas();
break;
case 'R':
confirmaSeAApostaFoiFeita(); // Funcao a ser implementada [WIP]
exibeTelaDoSorteio();
break;
case 'S':
break;
default:
System.out.println("\n:: Opcao invalida. Tente novamente...");
selecionaOpcoesDoMenuPrincipal();
break;
}
}
public static void exibeTelaDeApostas() {
System.out.println("");
System.out.println("======================================================");
System.out.println("| FAZER APOSTA |");
System.out.println("|====================================================|");
System.out.println("| nº | Valor | Sena | Quina | Quadra |");
System.out.println("|------|------------|------------|---------|---------|");
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.println("======================================================");
selecionaQuantidadeDeNumerosDaTelaDeApostas();
}
public static void selecionaQuantidadeDeNumerosDaTelaDeApostas() {
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();
}
int quantidadeDeNumerosAApostar = ler.nextInt();
switch (quantidadeDeNumerosAApostar) {
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;
default:
System.out.print("\n:: Digite um numero de 6 a 15 e aperte ENTER...\n");
selecionaQuantidadeDeNumerosDaTelaDeApostas();
}
confirmaValorDaAposta(quantidadeDeNumerosAApostar);
}
public static void confirmaValorDaAposta(int opcoesDaTelaDeApostas) {
System.out.println("");
System.out.printf(Locale.FRANCE,":: Valor para %d numeros: R$ %.2f\n", opcoesDaTelaDeApostas, valorDaAposta);
System.out.print("=> Confirma aposta? [S]im / [N]ao: ");
char confirmaValorDaAposta = ler.next().toUpperCase().charAt(0);
switch (confirmaValorDaAposta) {
case 'S':
selecionaNumerosASeremApostados(opcoesDaTelaDeApostas);
break;
case 'N':
char confirmaRetornoAoMenuPrincipal = ' ';
confirmaRetornoAoMenuPrincipal(confirmaRetornoAoMenuPrincipal);
break;
default:
System.out.println("\n:: Opcao invalida. Tente novamente...");
confirmaValorDaAposta(opcoesDaTelaDeApostas);
break;
}
}
public static void confirmaRetornoAoMenuPrincipal(char confirmaRetornoAoMenuPrincipal) {
System.out.println("");
System.out.print("=> Retornar ao Menu Principal? [S]im / [N]ao: ");
confirmaRetornoAoMenuPrincipal = ler.next().toUpperCase().charAt(0);
switch (confirmaRetornoAoMenuPrincipal) {
case 'S':
exibeMenuPrincipal();
break;
case 'N':
exibeTelaDeApostas();
break;
default:
System.out.println("\n:: Opcao invalida. Tente novamente...");
confirmaRetornoAoMenuPrincipal(confirmaRetornoAoMenuPrincipal);
break;
}
}
public static void selecionaNumerosASeremApostados(int quantidadeDeNumerosAApostar) {
numerosApostados = new int[quantidadeDeNumerosAApostar];
for (int i = 0; i < quantidadeDeNumerosAApostar;) {
System.out.println("");
System.out.print("=> Digite o " + (i + 1) + "º numero, de 1 a 60 (sem repeti-los): ");
verificaSeProximoInputEUmNumero(i);
numerosApostados[i] = ler.nextInt();
if (verificaSeExisteNumerosDuplicados() == 0) {
i++;
} else {
System.out.println("");
System.out.printf("[%d] e um numero repetido.\n", numerosApostados[i]);
}
System.out.printf("\nNumeros selecionados: %s.", Arrays.toString(numerosApostadosNaoRepetidos));
}
// for (int i = 0; i < quantidadeDeNumerosAApostar - 1;) {
// while (numerosApostados[i] < 1 || numerosApostados[i] > 60) {
// System.out.println("");
// System.out.print("=> Digite o " + (i + 1) + "º numero, de 1 a 60 (sem repeti-los): ");
//
// while (!ler.hasNextInt()) {
// System.out.println("");
// System.out.print("=> Escolha só numeros entre 1 e 60 e aperte ENTER...");
// ler.next();
// }
//
// numerosApostados[i] = ler.nextInt();
// }
// }
}
public static int verificaSeExisteNumerosDuplicados() {
int[] numerosApostadosSemZero = IntStream.of(numerosApostados).filter(j -> j != 0).toArray();
numerosApostadosNaoRepetidos = IntStream.of(numerosApostadosSemZero).distinct().toArray();
int diferenca = numerosApostadosSemZero.length - numerosApostadosNaoRepetidos.length;
return diferenca;
}
public static void verificaSeProximoInputEUmNumero(int i) {
while (numerosApostados[i] < 1 && numerosApostados[i] > 60) {
while (!ler.hasNextInt()) {
System.out.println("");
System.out.print("=> Escolha só numeros entre 1 e 60 e aperte ENTER...");
ler.next();
}
}
}
public static void confirmaNumerosApostados() {
}
public static void confirmaSeAApostaFoiFeita() {
}
public static void exibeTelaDoSorteio() {
}
public static void comparaOsNumerosSorteadosComOsApostados() {
}
public static void exibeResultadoFinal() {
}
}