ricardoneves93 Posted February 20, 2013 at 10:47 PM Report #496388 Posted February 20, 2013 at 10:47 PM (edited) Estou a criar um programa simples para gerar uma aposta de totoloto, ou a minha ideia é gerar um array usando a classe Random do java com 6 elementos que podem variar de 1 a 49. O meu problema está a ser garantir que estes não se repetem, eu faço uma primeira verificação com dois ciclos for em simultâneo, porem imaginemos o seguinte array {1,2,2,3,4,6,} ao verificar com os ciclos vai-me encontrar os 2 repetidos e para o segundo 2 vai ser feita a função random até que este seja diferente de 2, mas o problema é que nada o impede que seja igual a 1, nesse caso não consigo lidar com este bug. Alguém me pode dar uma dica? Junto mando o meu codigo. import java.util.Arrays; import java.util.Random; public class Apostas { private static final int TAMANHO_APOSTA = 6; private static final int NUM_MAXIMO = 49; int[] nums = new int[TAMANHO_APOSTA]; Random r = new Random(); public Apostas() { geraAposta(); } public void geraAposta() { for (int i = 0; i < TAMANHO_APOSTA; i++) { nums[i] = r.nextInt(NUM_MAXIMO) + 1; } } public void mostraAposta() { for (int i = 0; i < nums.length; i++) System.out.println(nums[i]); } public void verificaAposta() { for (int i = 0; i < TAMANHO_APOSTA - 1; i++) { for (int j = i + 1; j < TAMANHO_APOSTA; j++) { do if (nums[i] == nums[j]) nums[j] = r.nextInt(NUM_MAXIMO) + 1; while (nums[i] == nums[j]); } } } public void sort(){ Arrays.sort(nums); } } Edited February 20, 2013 at 10:48 PM by ricardoneves93 http://www.speedtest.net/result/2682095343.png
pmg Posted February 20, 2013 at 10:49 PM Report #496390 Posted February 20, 2013 at 10:49 PM A maneira canonica é meteres num array todos os valores possiveis, baralhar o array, e seleccionar o numero de elementos que precisas. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
ricardoneves93 Posted February 20, 2013 at 10:56 PM Author Report #496394 Posted February 20, 2013 at 10:56 PM A maneira canonica é meteres num array todos os valores possiveis, baralhar o array, e seleccionar o numero de elementos que precisas. É uma boa ideia, não tinha pensado nisso, é um processo muito mais simples. Obrigado Só uma questão existe alguma função do java que faça isso automáticamente, é que só estou a encontrar para fazer shuffle a listas. http://www.speedtest.net/result/2682095343.png
HappyHippyHippo Posted February 20, 2013 at 10:57 PM Report #496396 Posted February 20, 2013 at 10:57 PM http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#shuffle(java.util.List) IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
pmg Posted February 20, 2013 at 11:10 PM Report #496403 Posted February 20, 2013 at 11:10 PM (edited) Funcao do Java que faça isso automaticamente, nao sei (nunca escrevi uma linha de codigo Java). Mas certamente nao e dificil escrever uma implementacao do "Knuth shuffle". Edited February 20, 2013 at 11:11 PM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
ricardoneves93 Posted February 20, 2013 at 11:23 PM Author Report #496405 Posted February 20, 2013 at 11:23 PM Funcao do Java que faça isso automaticamente, nao sei (nunca escrevi uma linha de codigo Java). Mas certamente nao e dificil escrever uma implementacao do "Knuth shuffle". Já consegui implementar um shuffle, depois basta retirar por exemplo os 1os 6 e já está. Mais uma vez obrigado a todos 😉 http://www.speedtest.net/result/2682095343.png
HappyHippyHippo Posted February 20, 2013 at 11:38 PM Report #496408 Posted February 20, 2013 at 11:38 PM agora que já descobriste, fica aqui a solução: Integer[] nums = { 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, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49}; List<Integer> list = Arrays.asList(nums); Collections.shuffle(list); // usar os primeiros 6 números da lista "list" IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
ricardoneves93 Posted February 20, 2013 at 11:43 PM Author Report #496410 Posted February 20, 2013 at 11:43 PM Exactamente como eu fiz 😉 http://www.speedtest.net/result/2682095343.png
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now