Randomização de Vetor

4 respostas
Splayer

Galera, como randomizar X vezes um vetor que já possui informações e passar elas para outro vetor?

String elemento[] = {"Ar", "Terra","Agua","Fogo","Madeira"}; //<-- vetor incial
int x = 3; //<-- quantidade de randomização
String escolhas[]; //<--vetor final
//Exemplo
//String escolhas[] = {"Fogo","Éter","Fogo"};

Valeu!

4 Respostas

D

Olá

Um algoritmo para embaralhar os elementos num vator:

para i de vetor.length até 1 (passo -1) repita {
    // obter um indice aleatorio de 1 até i
    indiceAleatorio = random(i);

    // troca com o elemento no indice i
    elementoSorteado = vetor[indiceAleatorio];
    vetor[indiceAleatorio] = vetor[i];
    vetor[i] = elementoSorteado;
}

A ideia desse algoritmo é determinar quem ocupa a ultima casa dos sorteáveis, o elemento sorteado sempre vai para a casa de índice i que não é mais sorteável após a troca.

Depois basta fazer um loop para repetir x vezes.

Dragoon

Maneira 1:

DEMO

Random random = new Random();        
String elemento[] = {"Ar", "Terra","Agua","Fogo","Madeira"}; 
int x = 5;
int c = 0;
int p = -1;        
String escolhas[] = new String[x];
while (c < x)
{
	p = random.nextInt(x);
	while (elemento[p] == null)
	{
		p = random.nextInt(x);
	}
	escolhas[c] = elemento[p];
	elemento[p] = null;
	c++;
}        
for(String d: escolhas)
{
	System.out.println(d);
}

Maneira 2:

DEMO

Random random = new Random();        
String elemento[] = {"Ar", "Terra","Agua","Fogo","Madeira"}; 
int x = 5;
int c = 0;
int p = -1;        
String escolhas[] = new String[x];
while (c < x)
{
	p = random.nextInt(((x-c)));            
	escolhas[c] = elemento[p];
	if (p != ((x-c)-1))
	{
		elemento[p] = elemento[(x-c)-1];
		elemento[(x-c)-1] = null;
	}
	else 
	{
		elemento[(x-c)-1] = null;
	}
	
	c++;
}        
for(String d: escolhas)
{
	System.out.println(d);
}
Splayer

Gostei da sua reposta, mas como ficaria o código? xD
eu não sei muito bem a programar

(adicionei um exemplo no topico)

Splayer

Valeu, usei o 1º exemplo e funcionou!
Estava querendo aprender a fazer um código simples, mas você já fez! HUHEAUHEHAU

@Edit
Na variavel int x, dá erro ao colocar numero maior que 5
(testei nos 2 exemplos, numeros maiores, dá erro)

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
	at principal.RandomNumeros.main(RandomNumeros.java:17)
C:\Users\USER\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)

@Edit2
Acho que você pensou que a variavel int x era o tamanho do vetor, e não a quantidade de randomização do vetor elementos que teria no outro vetor escolhas :stuck_out_tongue:

(adicionei um exemplo no topico)

Criado 19 de junho de 2016
Ultima resposta 20 de jun. de 2016
Respostas 4
Participantes 3