Algoritmo para preencher vetor com números randômicos e diferentes

[ads2]
Olá a todos, hoje vamos aprender como fazer um algoritmo que preencha um vetor ou lista com números randômicos e diferentes. Você pode usar este algoritmo de diversas maneiras, em programas ou jogos. Por exemplo, suponhamos que eu esteja desenvolvendo um jogo de corrida de carros, e tenha que a cada nova corrida, colocar os carros no grid de forma aleatória, considerando que sejam 9 carros.
Neste caso podemos usar um vetor de 9 posições, o qual iremos preencher com números de 1 a 9, que representam os carros, para isso precisamos gerar os números randomicamente.
Veja a baixo um exemplo feito na linguagem JavaScript

Em JavaScript

var num = new Array(9); //criando vetor com 9 posições
for(var i=0;i<9;i++){ //laço para percorrer todo o vetor
	var randomico = Math.floor(Math.random()*9)+1; //gerando número aleatório
	var existe=false; //para saber se o numero existe ou não no vetor
	for(var cont=0;cont

Veja que o que é feito é um laço de repetição para percorrer o vetor, e que o valor gerado aleatoriamente é testado para ver se ele já existe no vetor por meio de mais um laço de repetição que percorre o vetor até a ultima posição testada. Se o número já existe o algoritmo salva o valor true na variável existe (da qual falo abaixo) e sai do segundo laço com o comando break, se não ele atribui false a variável existe.
A variável existe é do tipo boolean, e é fundamental para o funcionamento do algoritmo, pois ela serve para determinar se o número já existe ou não, veja que inicialmente ela assume o valor false, mas que pode ser alterada de acordo com a existência do número procurado. No final os testes são feitos com ela e se for igual a false ela guarda o número gerado no vetor, se for verdadeiro é decrementado a variável de controle do laço para que ele execute novamente na mesma posição.

Exemplo em Java

public class Main {
    public static void main(String[] args){
        int num[]=new int[9];//Criando vetor
        for(int i=0;i

Caso vocês tenham sugestões para melhorar o algoritmo deixem nos comentários. Até a próxima!
[ads1]

Jayr Alencar

Doutorando em Ciências da Computação no Centro de Informática da Universidade Federal do Pernambuco (CIn - UFPE); Mestre pela mesma instituição; Formado em Análise e Desenvolvimento de Sistemas; Católico; Fã de O Senhor do Anéis.

Você pode gostar...

7 Resultados

  1. José Alves disse:

    Isso é coisa de criança, de quem está em primeiro semestre em faculdade…

    de todo caso, em java:


    final int QUANT = 9;
    List x = new ArrayList();
    for(int i = 1; i <= QUANT; i++) x.add(i);
    Collections.shuffle(x);
    int[] x1 = new int[x.size()];
    for(int i = 0; i < x.size(); i++) x1[i] = x.get(i);

    • Wong Fei Hung disse:

      Error de compilação ao atribuir tipo de objeto diferente, a necessidade de fazer o cast , ou atribuir o tipo da lista para Integer, sugestão:

      (int) x.get(i);
      List x = new ArrayList();

    • paulo ricardo disse:

      Sejas menos presunçoso, vc não nasceu sabendo.
      Humildade faz bem ao espirito.

  2. José Alves disse:

    Ou então as linhas

    int[] x1 = new int[x.size()];
    for(int i = 0; i < x.size(); i++) x1[i] = x.get(i);

    poderiam virar

    Integer[] x1 = (Integer[])x.toArray();

  3. Skiller disse:

    JavaScript

    arrasta=[]; // Fazemos um array para o sorteio
    contagem; // contagem de length para verificação

    function simples() // função principal que deve ser chamada
    {
    var max=12; // variáveis referenciais para o math.random e função embaralhar()
    var min=1; // idem

    for(i=0; i<=5 ; i ++) //laço de repetição que marca as posições no array

    arrasta.push(embaralha(min,max) ); //os resultados embutidos no vetor arrasta vindo da função embaralha.

    arrasta2= new Set(arrasta); // caso haja sorteios de valores iguais no vetor, esse parâmetro retira.

    arrasta3=[…arrasta2]; // criamos uma um array novo para recebermos os novos valores do parametro acima sem resultados duplicados.
    contagem=arrasta3.length // a variável universal "contagem" recebe a quantidade de elementos dentro da array "arrasta3"

    // Mas como recebemos a quantidade certa do laço for no array? Legal , o parâmetro "Set" vai retirar as repetidas ,mas não vai adicionar novas não repetidas.
    Mas temos o pulo do gato aqui no laço "While".

    while((contagem 5)) //
    {
    simples();

    }

    alert(arrasta3);
    }
    // Como temos que receber exatamente 5 posições com valores diferentes , o laço nunca vai terminar se não recebermos os 5 valores diferentes. Ou seja , só vai sair do laço se forem 5 valores diferentes como assim desejamos.

    function embaralha( min , max )

    {
    var calculo=Math.floor(Math.random()*(max-min))+min;
    return calculo;
    }
    // Função que temos como resultado os parâmetros para a função principal que irá retornar os resultados aleatórios exigidos para um vetor sorteados com números aleatórios.

  4. Skiller disse:

    Já coloquei aqui um método antes para fazer a mesma coisa em JavaScript.
    Mas como tudo na vida deve ser simplificado,aqui vai um código fresco e com muito menos linhas :

    vetor[]; // vetor vazio para o sorteio randômico.
    //Faremos um laço For para definirmos quantas posições queremos dentro do vetor.
    for(i=0;i<=9;i++); // no caso , aqui, quero que ele tenha 10 posições.
    {
    var sorteio =Math.floor(Math.random()*(20-1))+2; // Serão sorteados números de 1 a 20.
    vetor.push(sorteio); // Aqui , colocamos os números dos 10 sorteios diferentes dentro de cada uma das 10 posições dentro do vetor.
    }

    // Agora, sabemos que temos 10 números aleatórios dentro do nosso vetor . Mas e se eles forem repetidos ? Temos como ajustar para que eles sejam sempre diferentes uns dos outros?
    Claro que sim!
    Criaremos uma variável para que faça esse filtro para nós:
    var vetor2= new Set(vetor);
    // Criamos agora um vetor para receber os números diferentes uns dos outros após o filtro.
    var vetor3[…vetor2];
    //Pronto! Agora para que possamos ver o resultado na tela , jogamos um "document.write com o resultado:

    document.write (vetor3);

    Legal! Agora temos os nossos números aleatórios dentro de um array de forma bem simples! Claro que , caso queiramos um número determinado de posições , podemos jogar um slice para apagar a "sobra".
    No nosso caso , se quisermos mostrar apenas 5 posições (5 números sorteados)
    ,faremos da seguinte maneira:
    var definicao=vetor3.slice(-5);
    document.write(definicao);

    Espero ter ajudado e mostrado mais uma forma de se fazer a mesma coisa!

    Segue o código na íntegra e sem comentários(limpo):

    var teste =[];
    for(i=0;i<=9;i++)
    {

    var sorte= Math.floor(Math.random() *(20-1))+2;
    teste.push(sorte);

    }
    var teste2=new Set(teste);
    var teste3=[…teste2];
    var definicao=teste3.slice(-5);
    document.write(definicao);

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *