[RESOLVIDO] Problema com randômico repetido em vetor
10 respostas
M
mctheus
Boa tarde, pessoal eu estou precisando preencher esse segundo vetor chamado novovetor[], com os dados do vetor principal[], de forma randômica e sem repetir. Já tentei de todas as formas criar um laço de repetição para filtrar a repetição e não consigo, apenas consegui criar o código aleatório, segue abaixo o meu código. Se alguém poder me ajudar. Obrigado.
Pra utilizando o Random toda vez que gerar um numero aleatório vai precisar fazer uma busca para ver se o valor correspondente a aquele índice já não foi inserido, isso é um saco! Se for apenas esta a finalidade use o shuffle
Abs!
A
Alexsandro_Lopes
O que entendi é que você está usando os valores randômicos como índice para escolha aleatória dos nomes e não quer que esses valores se repitam, porque iria sobrescrever o valor daquele array. é isso?
Você colocou como escopo o tamanho do array que é 5, caso seja escolhido este número você irá receber uma exceção por está tentando acessar um índice que não existe, pois seu array tem 5 posições que vai de 0 a 4.
importjava.util.Random;publicclassVector{publicstaticvoidmain(String[]args){Randomrandom=newRandom();inti=0;Stringprincipal[]={"joao","jose","marios","breno","roberto"};Stringnovovetor[]=newString[principal.length];while(i<principal.length){Stringprincipaltexto=principal[random.nextInt(principal.length)];if(verifica(novovetor,principaltexto)==false){novovetor[i]=principaltexto;System.out.println(novovetor[i]);i++;}}}// Verifica se existe o elemento no vetor publicstaticbooleanverifica(String[]vetor,Stringnome){for(inti=0;i<vetor.length;i++){if(vetor[i]==null)returnfalse;if(vetor[i].equals(nome))returntrue;}returnfalse;}}
O problema que fazer isso com Random e ainda garantir não haverá valores repetidos é muito custoso. Digamos que o vetor tenha 100 nomes, quantos ifs o código vai executar?
Aumentando um pouco a escala, imagine com 1000… por questões de desempenho o shuffle é melhor, pois pelo que entendi a necessidade é apenas embaralhar os valores.
Abs!
A
Alexsandro_Lopes
Rodei o código do mctheus e gera nomes repetidos no novo array e acho que ele não deseja isso, e pela forma(código) que está fazendo acredito que não conhece ou não pode usar(restrição do professor) toda a facilidade da API Java.
Acho que a implementação do andrews360 deve ter solucionado o problema.
Concordo com você
andrews360
como o freakazoid disse é verdadeira mente custoso fazer isso ainda mais porque o random pode gerar varias vezes o mesmo índice mais para fins didático funciona bem
M
mctheus
Pessoal, o fato é que não conhecia o shuffle msm rsrsrs.
Eu sou totalmente noob em programação, estou cursando o 7º periodo de programação, e até então só focava no setor de TI, agora que estou tomando gosto pela programação =D
Eu consigo, pegar a posição dos itens, pra utiliza-los posteriormente, com o arraylist ?
Obrigado a todos. Principalmente aos amigos, que ofereceram duas formas diferentes pra resolver o problema. =D