Oi pessoal, eu tenho esse exercício de mega sena:
(Elabore um algoritmo que registre as apostas da Mega-Sena. O jogador pode realizar
apostas de 6 até 15 números, entre 1 e 60. O algoritmo deve então solicitar que o
usuário informe:
- a quantidade de números da sua aposta;
- receber as apostas (entre 1 e 60);
- mostrar a aposta realizada ordenada e;
- mostrar o valor a ser cobrado por ela.
O valor da aposta deve ser obtido conforme tabela abaixo:
Importante: para ser uma aposta, deve ser um número inteiro – e não existem
apostas com número zero (0))
E eu já produzi isso em Java NetBeans sem swing:
import java.util.ArrayList;
import java.util.Scanner;
public class Mega_Sena {
public static void main(String[] args) {
Scanner apostaScanner = new Scanner(System.in);
Scanner numerosDaApostaScanner = new Scanner(System.in);
System.out.print("Informe quantos números quer apostar: ");
int apostas = apostaScanner.nextInt();
// Sistema de inicialização
if (apostas >= 6 && apostas <= 15) {
ArrayList<Integer> numerosMega = new ArrayList();
int i = 1;
System.out.print("[");
while (i <= 60) {
System.out.print(i + " ");
i++;
}
System.out.println("]");
System.out.println("Aposte em " + apostas + " números dessa lista");
// fim do sistema de inicialização
// coleta de números para comapração
for (int j = 0; j < apostas; j++) {
System.out.println("Informe as apostas");
int aux = numerosDaApostaScanner.nextInt();
if (numerosMega.contains(aux)) {
System.out.println("Valor já informado, Programa encerrado");
System.exit(0);
}
if (aux >= 1 && aux <= 60) {
numerosMega.add(aux);
}
else {
System.out.println("Valor inesperado informado, Programa Encerrado");
System.exit(0);
}
}
System.out.println(numerosMega);
switch (apostas) {
case 6:
System.out.println("Valor da aposta: R$4,50");
break;
case 7:
System.out.println("Valor da aposta: R$31,50");
break;
case 8:
System.out.println("Valor da aposta: R$126,00");
break;
case 9:
System.out.println("Valor da aposta: R$378,00");
break;
case 10:
System.out.println("Valor da aposta: R$945,00");
break;
case 11:
System.out.println("Valor da aposta: R$2.079,00");
break;
case 12:
System.out.println("Valor da aposta: R$4.158,00");
break;
case 13:
System.out.println("Valor da aposta: R$7.722,00");
break;
case 14:
System.out.println("Valor da aposta: R$13.513,00");
break;
case 15:
System.out.println("Valor da aposta: R$22.522,50");
break;
}
}
}
}
— Só que há um problema, eu coloquei um system para saída caso haja alguma aposta repetida ou cujo valor é igual a zero, só que meu professor quer que caso haja repetição ou valor igual a zero que o usuário informe novamente essa aposta em questão e siga com o programa, mas eu não sei como fazer isso, podem me ajudar por favor a achar uma solução?
Agradeço desde já.
Olá Luiz.
Seu código para porque você tem que criar laços para garantir a entrada de dados na quantidade que você precisa
Segue um código que funciona para o que você precisa.
É logico que tem 1000 maneiras de fazê-lo mais enxuto usando lambda e outras funções.
tentei comentar pra que fique claro. Não use meu código pra mostrar ao seu professor. crie o seu usando-o como referência assim você aprende melhor.
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// OS LIMITES DO SEU ARRAY NUEMROS POSSIVEIS
int menorNumeroPossivel = 1;
int maiorNumeroPossível = 60;
// OS LIMITES DO SEU ARRAY NUMEROS POR APOSTA
int menorApostaPossivel = 6;
int maiorApostaPossível = 15;
Scanner apostaScanner = new Scanner(System.in);
Scanner numerosDaApostaScanner = new Scanner(System.in);
System.out.print("Informe quantos números quer apostar: ");
int qtdeNumerosApostaCapturada = apostaScanner.nextInt();
// ESTE LOOP GARANTE QUE OS NUMEROS DIGITADOS PARA LIMITE DAS APOSTAS FICARAO ENTRE 6 e 15
while (qtdeNumerosApostaCapturada < 6 || qtdeNumerosApostaCapturada > 15) {
System.out.println("Digite um numero entre 6 e 15");
qtdeNumerosApostaCapturada = apostaScanner.nextInt();
}
// APOSTAS SERÁ O SEU ARRAY DE APOSTAS E SEMPRE TERA O TAMANHO ESCOLHIDO PELO APOSTADOR
ArrayList<Integer> apostas = new ArrayList<Integer>();
// O LOOPABAIXO GARANTE A LEITURA DE NUMEROS ATÉ LIMITE DE APOSTA ESCOLHIDO. ALGO COMO "SE O APOSTADOR ESCOLHEU 6 LEIA 6 NUMEROS
while (apostas.size() < qtdeNumerosApostaCapturada) {
// FAZ A LEITURA DOS VALORES
System.out.println("Informe as apostas");
int aux = numerosDaApostaScanner.nextInt();
// TESTA SE O NUMERO DIGITADO ESTA NOS LIMITES 1 e 60
if (aux >= menorNumeroPossivel && aux <= maiorNumeroPossível) {
// TESTA SE O NUMERO DIGITADO JA NAO EXISTE NA APOSTA
if (!apostas.contains(aux)) {
// SE NAO EXISTIR ADICIONA NA LISTA
apostas.add(aux);
} else {
// SE EXISTIR AVISA E CONTINUA SOLICITANDO
System.out.println("Erro este numero já foi escolhido");
}
} else {
// Se O NUMERO DIGITADO ESTIVER FORA DO LIMITE 1 e 60 INFORMA ERRO E CONTINUA SOLICITANDO
System.out.println("Numero invalido, digite novamente.");
}
}
// A CLASSE COLLECTIONS ORDENA OS NUEMROS EM ORDEM CRESCENTE DENTRO DA LISTA
Collections.sort(apostas);
// LOOP FOR EACH APENAS PARA IMPRIMIR A APOSTA APÓS SAIR DO LOOP
System.out.println("VOCE APOSTOU NOS NUMEROS:");
apostas.forEach(s -> System.out.println(s));
// SEU SWITCH APENAS PARA IMPRIR O PREÇO DAS APOSTAS DE ACORDO COM A QUANTIDADE DE NUMEROS
switch (qtdeNumerosApostaCapturada) {
case 6:
System.out.println("Valor da aposta: R$4,50");
break;
case 7:
System.out.println("Valor da aposta: R$31,50");
break;
case 8:
System.out.println("Valor da aposta: R$126,00");
break;
case 9:
System.out.println("Valor da aposta: R$378,00");
break;
case 10:
System.out.println("Valor da aposta: R$945,00");
break;
case 11:
System.out.println("Valor da aposta: R$2.079,00");
break;
case 12:
System.out.println("Valor da aposta: R$4.158,00");
break;
case 13:
System.out.println("Valor da aposta: R$7.722,00");
break;
case 14:
System.out.println("Valor da aposta: R$13.513,00");
break;
case 15:
System.out.println("Valor da aposta: R$22.522,50");
break;
}
}
}
Espero ter ajudado.
1 curtida
Ajudou bastante na montagem do meu, mas tu poderia apagar sua resposta?
Não entendi o porquê disso.