Quick actions

cmd+k|ctrl+k

Navigation

Languages

Loteria

Snippet info

Language

Java

Visibility

public

Author

klausdevwalker

Created

2020-10-20T15:20:24Z

Updated

2020-11-03T15:17:44Z

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