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 1011 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.
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));
}
}
[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…
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
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
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
[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…
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!
[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…
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!!