Randomizar 1 array

3 respostas
S

Boa tarde galera
estou precisando de ajuda
estou tentando criar um vetor com numeros aleatórios e não repetidos usando o match.random e não estou conseguindo
alguém pode sugerir algo no meo código?
segue abaixo

public class Teste {
	public static int gerarnumero(){
	int	a = (int) (Math.random()*8) ;
		return a;
	}
	public static void receberNumeros(int x){
		int[] a = new int [9];
		for (int i=0; i<a.length;i++){
		for (int j=0; j<a.length ;j++){
			 if(x!=a[j]){
			   a[i]= x;
			   
			 }
			 
		 else
			receberNumeros(Teste.gerarnumero());
		}
		}
		for (int i=0; i<9;i++){
		System.out.println(a[i]);
		}
		
	}
public static void main (String args[]){
Teste.receberNumeros(Teste.gerarnumero());
 }
	 
	 }

3 Respostas

E

Para não ter números repetidos, você precisa guardar os números já sorteados.

Math.random() funciona igualzinho a um dado : quando você atira um dado para cima, ele pode cair com o número 1, 2, 3 … até o 6 para cima. Quando você for jogá-lo de novo, você pode ter qualquer número de 1 até 6, incluindo um número que já apareceu.

ViniGodoy

Dica: Se o intervalo de números é conhecido, é mais fácil gerar um array com todos os números do intervalo e usar o random apenas para embaralhar o array.

O algoritmo para isso é:

  1. Gere um array com todos os números em ordem;
  2. Para cada elemento “i” do array:
    2.1. Sorteie um número de i+1 até length-1;
    2.2. Troque a posiçãodo elemento i com o elemento sorteado.

Isso gerará um array completamente embaralhado, com ótima performance (a implementação desse algoritmo em java está nesse tópico).

S

Boa vini
é isso mesmo que eu vou fazer
wlw

Criado 4 de maio de 2011
Ultima resposta 4 de mai. de 2011
Respostas 3
Participantes 3