Jump to content

Recommended Posts

Posted (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 by ricardoneves93
Posted

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!

Posted

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.

Posted (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 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!

Posted

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.