Loteria 3.0

Bom, primeiramente me desculpem por ter criado vários tópicos para tirar minhas dúvidas sobre o código da loteria, sem costume com foruns… :frowning:

pra acompanhar melhor segue os links dos outros tópicos que criei:


O código abaixo sorteia X números com a opção de escolher X números pra não entrar no sorteio, parecido com o sistema deste link http://www.interney.net/lotofacil.php

    import java.util.ArrayList;  
    import java.util.Arrays;  
    import java.util.Random;  
    import java.util.Scanner;  
      
    public class Loteria {  
      
        public static void main(String[] args) throws Exception {  
      
             int qtdNumerosSorteio = 0;  
             int qtdNumerosExclusao = 0;  
             Scanner input = new Scanner(System.in);  
      
             System.out.println("Digite a quantidade de números que serão sorteados: ");  
             qtdNumerosSorteio = input.nextInt();  
      
             Integer[] numerosSorteio = new Integer[qtdNumerosSorteio];  
      
             for(int i = 0; i < qtdNumerosSorteio; i++) {  
                 System.out.println("Informe os Numeros: ");  
                 numerosSorteio[i] = input.nextInt();  
             }  
      
             System.out.println("Quantos números deseja excluir? ");  
             qtdNumerosExclusao = input.nextInt();  
      
             Integer[] numerosExclusao = new Integer[qtdNumerosExclusao];  
      
             for(int i = 0; i < qtdNumerosExclusao; i++) {  
                 System.out.println("Informe os Numeros que serão excluidos: ");  
                 numerosExclusao[i] = input.nextInt();  
             }  
      
             sortear(numerosSorteio, numerosExclusao);  
        }  
      
        public static void sortear(Integer [] arrayNumbers, Integer ... arrayExceptions) {  
            ArrayList<Integer> listNumbers = new ArrayList<Integer>();  
            listNumbers.addAll(Arrays.asList(arrayNumbers));  
            ArrayList<Integer> listExceptions = new ArrayList<Integer>();  
            listExceptions.addAll(Arrays.asList(arrayExceptions));  
            listNumbers.removeAll(listExceptions);  
            Random r = new Random();  
            while (!listNumbers.isEmpty()) {  
                int index = r.nextInt(listNumbers.size());  
                System.out.println(listNumbers.remove(index));  
            }  
        }  
    }  

o problema é o seguinte: implementar ao código a opção de deixar X números fixos, assim como os excluidos, mas agora terão numeros fixos, excluidos, e o restante aleatorio
exemplo:

Lotofacil:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Numeros Excluidos:
5 10 24

Numeros Fixos:
11 13 20 25

aleatorios:
1 2 3 4 6 7 8 9 12 14 15 16 17 18 19 21 22 23

o sistema deverá sortear 15 numeros no total,
4 fixos e 11 aleatorios dentre os 18.

como faço pra implementar essa opção ao código?

Att.
Romário

Basta você excluir os números que não quer da lista dos sorteados, usando o método remove, não?

Boa noite,

Tipo não entendi muito bem,

O passo a passo do código seria esse:

1 - Escolher a quantidade de números a serem sorteados;

2 - Informar os números para o sorteio;

3 - Escolher a quantidade de números a serem excluidos;

4 - Informar os números que deseja excluir;

5 - É passado por parametro para o método sortear, os números do sorteio e os números a serem excluidos,

6 - O método separa esses números em 2 ArrayList, listNumbers e listExceptions;

7 - É feita a remoção dos números que você escolheu para serem excluidos da listNumbers;

8 - Enquanto existe números na ArrayList você sorteia de acordo com o tamanho da lista, apresenta o número sorteado e exclui o mesmo da lista…

Certo a minha conclusão é a seguinte:

Na verdade os números já são fixos, certo ?

Porque os mesmos números que você informa é esses que são sorteados !

O que muda é apenas a ordem em que eles são apresentados !

Pra que então criar mais uma lista com números “fixos” ?

:smiley:

[quote=RodrigoM91]Boa noite,

Tipo não entendi muito bem,

O passo a passo do código seria esse:

1 - Escolher a quantidade de números a serem sorteados;

2 - Informar os números para o sorteio;

3 - Escolher a quantidade de números a serem excluidos;

4 - Informar os números que deseja excluir;

5 - É passado por parametro para o método sortear, os números do sorteio e os números a serem excluidos,

6 - O método separa esses números em 2 ArrayList, listNumbers e listExceptions;

7 - É feita a remoção dos números que você escolheu para serem excluidos da listNumbers;

8 - Enquanto existe números na ArrayList você sorteia de acordo com o tamanho da lista, apresenta o número sorteado e exclui o mesmo da lista…

Certo a minha conclusão é a seguinte:

Na verdade os números já são fixos, certo ?

Porque os mesmos números que você informa é esses que são sorteados !

O que muda é apenas a ordem em que eles são apresentados !

Pra que então criar mais uma lista com números “fixos” ?

:smiley:
[/quote]

Pois é, faltou falar que precisa mudar isso ai tbm, foi mal
oq eu quero mesmo é igual ta no exemplo

o codigo ja vai dar os 25 numeros da lotofacil, alguns serao excluidos, e 15 serao sorteados, dentre os sorteados terão numeros fixos e aleatorios

Boa noite denovo :smiley:

Bom fiz conforme as regras do site que você passou, agora acho que finalmente o caso da Loteria foi resolvido, (espero né :D)

Segue como foi feito:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class Loteria3 {
	
	     public static void main(String[] args) throws Exception {    
	     
	          int numeroIntervalo = 0;    
	          Integer[] numerosExclusao;    
	          Scanner input = new Scanner(System.in);    
	          
	          //Informa aqui qualquer número de 1 a 25 que vai ser o intervalo.
	          //Ex.: 15.
	          System.out.println("Digite o intervalo de números (mínimo 15 , máximo 25): ");    
	          numeroIntervalo = input.nextInt();        
	          
	          //Verifica se a pessoa deseja que algum número seja ignorado ou não.
	          System.out.println("Deseja excluir algum número? Digite true ou false: ");
	          boolean excluiNumeros = input.nextBoolean();
	          
	          //Se a pessoa deseja ignorar algum número, a mesma informa quais números deseja ignorar separados por virgula
	          //Ex.: 1,2.
	          if (excluiNumeros) {
		          String lerNumeros;
		          System.out.println("Digite os números que deseja excluir separados por vírgula: ");    
		          lerNumeros = input.next();    
		     
		          String[] numeros = lerNumeros.split(",");
		          numerosExclusao = new Integer[numeros.length];
		          
		          for (int i = 0; i < numeros.length; i++) {
		        	  numerosExclusao[i] = Integer.valueOf(numeros[i]);
		          }	        	  
	          } else {
	        	  numerosExclusao = null;
	          }
	     	  
	          sortear(numeroIntervalo, numerosExclusao);    
	     }    
	     
	     public static void sortear(Integer intervalo, Integer ... arrayExceptions) {
	    	 ArrayList<Integer> arrayNumbers = new ArrayList<Integer>();
	         ArrayList<Integer> listExceptions = new ArrayList<Integer>();
	         
	         //Se existirem números para ser ignorados adiciona na lista.
	    	 if (arrayExceptions != null) {
		         listExceptions.addAll(Arrays.asList(arrayExceptions));        	    		 
	    	 }
	    	 
	         Random random;
	         int numeroSorteado;
	          for(int i = 0; i <= intervalo; i++) {
	        	  random = new Random();
	        	  //Se existem números a serem ignorados executa o sorteio do número até que
	        	  //o mesmo não esteja na lista de números ignorados e não seja igual a 0.
	        	  //Caso contrario sorteia um número até que o mesmo seja diferente de 0.
	        	  if (arrayExceptions != null) {
		        	  do {
			        	  numeroSorteado = random.nextInt(intervalo);
		        	  } while (listExceptions.contains(numeroSorteado) && !(numeroSorteado != 0));	        		  
	        	  } else {
	        		  do {
		        		  numeroSorteado = random.nextInt(intervalo);	        			  
	        		  } while (!(numeroSorteado != 0));
	        	  }
	        	  //adiciona o número sorteado na ArrayList.
		          arrayNumbers.add(numeroSorteado);
	          }
	          
	          //Como no final tem que ser apresentados somente 15 números, se a lista tiver mais que 15 números
	          //vai removendo números da lista aleatoriamente até que a mesma tenha 15 números, (acho que fui meio repetitivo nessa explicação :D).
        	  while (arrayNumbers.size() > 15) {
        		  random = new Random();
        		  arrayNumbers.remove(random.nextInt(arrayNumbers.size()));
        	  }
        	  
        	  //Exibe os números para que a pessoa possa fazer o seu jogo !
	          for (Integer numero : arrayNumbers) {
	        	  System.out.println(numero);
	          }
	     }    
	 }

Coloquei as explicações no código, acho que fui bem claro,

Espero que isso resolva, falo !

[quote=RodrigoM91]Boa noite denovo :smiley:

Bom fiz conforme as regras do site que você passou, agora acho que finalmente o caso da Loteria foi resolvido, (espero né :D)

Segue como foi feito:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class Loteria3 {
	
	     public static void main(String[] args) throws Exception {    
	     
	          int numeroIntervalo = 0;    
	          Integer[] numerosExclusao;    
	          Scanner input = new Scanner(System.in);    
	          
	          //Informa aqui qualquer número de 1 a 25 que vai ser o intervalo.
	          //Ex.: 15.
	          System.out.println("Digite o intervalo de números (mínimo 15 , máximo 25): ");    
	          numeroIntervalo = input.nextInt();        
	          
	          //Verifica se a pessoa deseja que algum número seja ignorado ou não.
	          System.out.println("Deseja excluir algum número? Digite true ou false: ");
	          boolean excluiNumeros = input.nextBoolean();
	          
	          //Se a pessoa deseja ignorar algum número, a mesma informa quais números deseja ignorar separados por virgula
	          //Ex.: 1,2.
	          if (excluiNumeros) {
		          String lerNumeros;
		          System.out.println("Digite os números que deseja excluir separados por vírgula: ");    
		          lerNumeros = input.next();    
		     
		          String[] numeros = lerNumeros.split(",");
		          numerosExclusao = new Integer[numeros.length];
		          
		          for (int i = 0; i < numeros.length; i++) {
		        	  numerosExclusao[i] = Integer.valueOf(numeros[i]);
		          }	        	  
	          } else {
	        	  numerosExclusao = null;
	          }
	     	  
	          sortear(numeroIntervalo, numerosExclusao);    
	     }    
	     
	     public static void sortear(Integer intervalo, Integer ... arrayExceptions) {
	    	 ArrayList<Integer> arrayNumbers = new ArrayList<Integer>();
	         ArrayList<Integer> listExceptions = new ArrayList<Integer>();
	         
	         //Se existirem números para ser ignorados adiciona na lista.
	    	 if (arrayExceptions != null) {
		         listExceptions.addAll(Arrays.asList(arrayExceptions));        	    		 
	    	 }
	    	 
	         Random random;
	         int numeroSorteado;
	          for(int i = 0; i <= intervalo; i++) {
	        	  random = new Random();
	        	  //Se existem números a serem ignorados executa o sorteio do número até que
	        	  //o mesmo não esteja na lista de números ignorados e não seja igual a 0.
	        	  //Caso contrario sorteia um número até que o mesmo seja diferente de 0.
	        	  if (arrayExceptions != null) {
		        	  do {
			        	  numeroSorteado = random.nextInt(intervalo);
		        	  } while (listExceptions.contains(numeroSorteado) && !(numeroSorteado != 0));	        		  
	        	  } else {
	        		  do {
		        		  numeroSorteado = random.nextInt(intervalo);	        			  
	        		  } while (!(numeroSorteado != 0));
	        	  }
	        	  //adiciona o número sorteado na ArrayList.
		          arrayNumbers.add(numeroSorteado);
	          }
	          
	          //Como no final tem que ser apresentados somente 15 números, se a lista tiver mais que 15 números
	          //vai removendo números da lista aleatoriamente até que a mesma tenha 15 números, (acho que fui meio repetitivo nessa explicação :D).
        	  while (arrayNumbers.size() > 15) {
        		  random = new Random();
        		  arrayNumbers.remove(random.nextInt(arrayNumbers.size()));
        	  }
        	  
        	  //Exibe os números para que a pessoa possa fazer o seu jogo !
	          for (Integer numero : arrayNumbers) {
	        	  System.out.println(numero);
	          }
	     }    
	 }

Coloquei as explicações no código, acho que fui bem claro,

Espero que isso resolva, falo ![/quote]

vlw por tentar ajudar brother, mas faltou o problema principal que se pede no tópico, que são os números fixos.

não precisa seguir o sistema daquele site, tenta com base no código que foi passado acima,
e no seu os números estão se repetindo. :?

Abraços
vlw!!

UP!