[RESOLVIDO] Loteria

Olá a todos, sou novo na area de programação e decidi fazer o seguinte programa(desafio):

Sortear números entre uma sequencia, mas com a opção de excluir alguns números do sorteio.

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
entre a lista acima eu gostaria que os números sublinhados não entrassem no sorteio.

Edit --> Entrem neste site e veja o sistema, é a mesma coisa que eu quero fazer. http://www.interney.net/lotofacil.php

Ainda não fiz nenhuma parte do código, não faço idéia de como fazer isso aí.

o que pode ser feito?
existe alguma função que faz isso?
quais funções devo utilizar pra fazer?

Att.
Romário

rcvasco, vc quer informar os numeros que serão deletados ou será randomicamente?

usa um ArrayList, joga os numeros la dentro, depois exclui os que vc quiser,
depois gera um (ou mais) random de 0 ate arrayList.size().

eu quero sortear todos os números, exceto os que foram excluidos.
igual o sistema que tem nesse site http://www.interney.net/lotofacil.php

Vc quer dizer, a medida que for sorteando, deve excluir akeles da lista???
Assim?

public static void sortear(List<?> list) {
        Random r = new Random();
        while (!list.isEmpty()) {
            int i = r.nextInt(list.size());
            System.out.println(list.remove(i));
        }
    }

Espero que não tenha estragado seu desafio… :stuck_out_tongue:

Boa sorte! []'s

[quote=JM4X]Vc quer dizer, a medida que for sorteando, deve excluir akeles da lista???
Assim?

public static void sortear(List<?> list) {
        Random r = new Random();
        while (!list.isEmpty()) {
            int i = r.nextInt(list.size());
            System.out.println(list.remove(i));
        }
    }

Espero que não tenha estragado seu desafio… :stuck_out_tongue:

Boa sorte! []'s[/quote]

não não
por exemplo, da lista dos 25 numeros eu seleciono 7 pra excluir, sobrará 18, e esses 18 que serão sorteados.

Fala aí irmãozinho…belê???
Vamos por passos:
1- vc deseja sortear números na faixa de 1 até 25 correto???
então precisamos fazer com que os números gerados aleatoriamente fique dentro desta faixa, assim como abaixo:

Math.random() * 25;

1.1-Ainda existe um pequeno problema o método Math.random() gera números do tipo double como 0.0;0.3;07;0.15 etc…
então tbm temos que transformar estes números para o tipo inteiro como 0;3;7;15 etc… utilizando casting desta maneira:

int valorSorteado = (int) ( Math.random() * 25 );

1.2- Op’s mais um probleminha aí, lembra que fizemos com q nosso método random sorteie 25 números??? Pois é… ele sorteia 25 Nº
mas ele conta com o nº zero então nossa faixa de números a serem sorteados ficou de 0 à 24. Agora ficou fácil né??? Ué he só somar +1 :slight_smile:

int valorSorteado = 1+ (int) ( Math.random() * 25 );

Prontinho… agora estamos sorteando números de 1 até 25 de forma aleatória.Podemos ir então para o próximo passo.
2-Agora nosso problema a ser resolvido será dos números repetidos. Podemos utilizar uma estrutura com 2 for’s:


for ( int i = 0; i<25; i++ )//nosso for com 25 iterações...
{
  valorSorteado = 1+ (int) ( Math.random() * 25 );//sorteando nº de 1 até 25

  for ( int j = 0; j < 25; j++ )// outro for q verifica se o valor sorteado já existe dentro do nosso array
  {
    if ( valorSorteado == sequenciaSorteada[j] &&  j != i )// if para verificação.. caso seja igual geramos outro nº
    {
      valorSorteado = 1+ (int) ( Math.random() * 25 );
    }
    else
    {
     sequenciaSorteada[i] = valorSorteado;//Caso não tenha  repetição guarda o nº sorteado num array
     }
}

Acredito q com isso vc já terá alguma noção para implementação do seu problema…
Qualquer coisa posta aí.

[quote=honurb]Fala aí irmãozinho…belê???
Vamos por passos:
1- vc deseja sortear números na faixa de 1 até 25 correto???
então precisamos fazer com que os números gerados aleatoriamente fique dentro desta faixa, assim como abaixo:

Math.random() * 25;

1.1-Ainda existe um pequeno problema o método Math.random() gera números do tipo double como 0.0;0.3;07;0.15 etc…
então tbm temos que transformar estes números para o tipo inteiro como 0;3;7;15 etc… utilizando casting desta maneira:

int valorSorteado = (int) ( Math.random() * 25 );

1.2- Op’s mais um probleminha aí, lembra que fizemos com q nosso método random sorteie 25 números??? Pois é… ele sorteia 25 Nº
mas ele conta com o nº zero então nossa faixa de números a serem sorteados ficou de 0 à 24. Agora ficou fácil né??? Ué he só somar +1 :slight_smile:

int valorSorteado = 1+ (int) ( Math.random() * 25 );

Prontinho… agora estamos sorteando números de 1 até 25 de forma aleatória.Podemos ir então para o próximo passo.
2-Agora nosso problema a ser resolvido será dos números repetidos. Podemos utilizar uma estrutura com 2 for’s:


for ( int i = 0; i<25; i++ )//nosso for com 25 iterações...
{
  valorSorteado = 1+ (int) ( Math.random() * 25 );//sorteando nº de 1 até 25

  for ( int j = 0; j < 25; j++ )// outro for q verifica se o valor sorteado já existe dentro do nosso array
  {
    if ( valorSorteado == sequenciaSorteada[j] &&  j != i )// if para verificação.. caso seja igual geramos outro nº
    {
      valorSorteado = 1+ (int) ( Math.random() * 25 );
    }
    else
    {
     sequenciaSorteada[i] = valorSorteado;//Caso não tenha  repetição guarda o nº sorteado num array
     }
}

Acredito q com isso vc já terá alguma noção para implementação do seu problema…
Qualquer coisa posta aí.[/quote]

vlw pela ajuda brother, vou tentar resolver meu problema utilizando seu metodo.

Se alguém tiver uma idéia melhor, por favor postar ai :slight_smile:

[quote=rcvasco][quote=JM4X]Vc quer dizer, a medida que for sorteando, deve excluir akeles da lista???
Assim?

public static void sortear(List<?> list) {
        Random r = new Random();
        while (!list.isEmpty()) {
            int i = r.nextInt(list.size());
            System.out.println(list.remove(i));
        }
    }

Espero que não tenha estragado seu desafio… :stuck_out_tongue:

Boa sorte! []'s[/quote]

não não
por exemplo, da lista dos 25 numeros eu seleciono 7 pra excluir, sobrará 18, e esses 18 que serão sorteados.

[/quote]

Testa essa bagacera aews…

public static void main(String[] args) throws Exception {
		sortear(new Integer[]{1,2,3,4,5}, 2,3);
	}

	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));
		}
	}

Fiz o método recebendo arrays, mas se vc tiver uma Collection ou uma List, da pra fazer, é só adaptar…

***Lembre-se de editar o titulo do topico para [RESOLVIDO] quando aceitar uma solução. A comu agradece!

[]'s

[quote=JM4X][quote=rcvasco][quote=JM4X]Vc quer dizer, a medida que for sorteando, deve excluir akeles da lista???
Assim?

public static void sortear(List<?> list) {
        Random r = new Random();
        while (!list.isEmpty()) {
            int i = r.nextInt(list.size());
            System.out.println(list.remove(i));
        }
    }

Espero que não tenha estragado seu desafio… :stuck_out_tongue:

Boa sorte! []'s[/quote]

não não
por exemplo, da lista dos 25 numeros eu seleciono 7 pra excluir, sobrará 18, e esses 18 que serão sorteados.

[/quote]

Testa essa bagacera aews…

public static void main(String[] args) throws Exception {
		sortear(new Integer[]{1,2,3,4,5}, 2,3);
	}

	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));
		}
	}

Fiz o método recebendo arrays, mas se vc tiver uma Collection ou uma List, da pra fazer, é só adaptar…

***Lembre-se de editar o titulo do topico para [RESOLVIDO] quando aceitar uma solução. A comu agradece!

[]'s[/quote]

cara, funcionou certinho, agora é só implementar no código!
vlw ae!!