1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C# Numero aleatorios diferentes

Discussão em 'Programação' iniciada por tig17, 8 de Outubro de 2008. (Respostas: 14; Visualizações: 6604)

  1. Pessoal tenho um codigo em C# onde me cria 5 numeros random e eu não queria que estes se repetissem. Queria meter um while dentro do ciclo for para ele repetir o for ate os valores serem diferentes, mas não sei a condição que devo meter. Alguem me podem ajudar?

    o meu código é este:

    Código:
     
    for (int i=1;i<=5;i++)
    { 
     
    listaNumeros.Add(number.Next(1, 101));
     
    [SIZE=2]listaNumeros.Sort();[/SIZE]
    [SIZE=2]}[/SIZE]
    
     
    Última edição pelo moderador: 8 de Outubro de 2008
  2. S0ul

    S0ul Power Member

    Boas, podes sempre em vez de adicionares logo à lista, criares o número e verificares com os numerosque estão na lista se é diferente, se for então ai adicionas!
     
  3. jota WA

    jota WA [email protected] Member

    Boas
    Esse listaNumeros é o que?Uma hashtable?Se for verificas 1º se o número existe (listaNumeros.ContainsValue(VALOR) e só depois adicionas à lista.
    Cumps
     
  4. Vou experimentar essa maneira.. Mas desta maneira que aqui tenho também não dará? ;)

    Código:
    [SIZE=2][COLOR=#0000ff]for[/COLOR][/SIZE][SIZE=2][COLOR=#000000] ([/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2][COLOR=#000000] i=1;i<=5;i++)[/COLOR][/SIZE]
    [SIZE=2]{[/SIZE]
    [SIZE=2]listaNumeros.Add(number.Next(1, 101));[/SIZE]
     
    [SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2](i == 2)[/SIZE]
    [SIZE=2]{[/SIZE]
    [SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][SIZE=2] (listaNumeros[i] == listaNumeros[i-1]) --> Dá erro aqui mas até tem lógica o código.[/SIZE]
    [SIZE=2]{[/SIZE]
    [SIZE=2]listaNumeros[i] = (number.Next(1, 101));[/SIZE]
    [SIZE=2]listaNumeros.Sort(); [/SIZE]
    [SIZE=2]}[/SIZE]
    [SIZE=2]listaNumeros.Sort();[/SIZE]
    [SIZE=2]}[/SIZE]
    [SIZE=2]}[/SIZE]
    
     
    Última edição pelo moderador: 8 de Outubro de 2008
  5. ByMySlf

    ByMySlf Power Member

    Código:
     int[] nums = new int[5];
       
                Random aleatorio = new Random();
                for (int i = 0; i < 5; i++)
                { 
                    bool jaExiste = false;
                    do
                    {
                        nums[i] = aleatorio.Next(1,101);
    
                        for (int k = 0; k < i; k++)
                        {
                            if (nums[k] == nums[i])
                                jaExiste = true;
                        }
                    } while (jaExiste);
                }
    
    Algo assim serve o teu propósito?
     
    Última edição: 8 de Outubro de 2008

  6. Em certo aspecto serve, mas eu preferia fazer com List<Int32> listaEstrelas = new List<Int32>(); pois assim consigo ordenar muito mais facilmente e se um dia quiser alterar para mais números é só acrescentar no ciclo for :P
     
  7. ByMySlf

    ByMySlf Power Member

    Ordenar um vector também é facílimo.

    Código:
     Array.Sort(vector)
    Relativamente à segunda hipótese, tens razão.

    Era só uma solução. :)
     
  8. Outra coisa em relação ao codigo que deste ele gera os nºs umas 3 vezes mas quando faço gerar uma quarta vez ele bloqueia. Não sei o que acontece mas dá a sensação que ou fica em looping ou não sei mesmo o que acontece...
     
  9. jota WA

    jota WA [email protected] Member

    Boas
    Realmente com uma lista tens obrigatoriamente que criar um ciclo for ou while para verificar em toda a lista se o número existe.
    Eu continuo a apoiar o hashtable,seria qualquer coisa deste género:

    Código:
    HashTable tabela = new HashTable;
    for (int i = 1; i <= 5; i ++)
    { 
      int Numero = 0;
      While (tabela.ContainsValue(Numero))
           Numero = number.Next(1, 101);
      listaNumeros.Add( i , Numero);
    }
    Para pesquisa é muito bom porque contém uma chave e um valor e podes descobrir se certa chave ou valor estão no hashtable apenas com uma linha de código ;)
    Cumps
     

  10. Vou experimentar... Parece mais simples com o Hashtable... Vamos lá ver xD
     
  11. The_True_Eue

    The_True_Eue Power Member

    Usa antes um Dictionary. É o mesmo que uma hashtable, mas é mais eficiente e seguro.
     
  12. SoundSurfer

    SoundSurfer Power Member

    Código:
                List<int> lista = new List<int>();
                while (list.Count < 6)
                {
                    int numero = number.Next(1, 101);
                    if (lista.Contains(numero) == false)
                    {
                        lista.Add(numero);
                    }
                }
    
     
  13. ByMySlf

    ByMySlf Power Member

    Só testei uma vez e como tal não reparei nesse pormenor. Mas já apresentaram aqui umas boas soluções. A do SoundSurfer aplica aquilo que pretendes.
     
    Última edição: 9 de Outubro de 2008
  14. Já consegui.. Fiz assim:
    Código:
    Random number = new Random();
    List<Int32> listaNumeros = new List<Int32>();
    int var = new int();
     
    for (int i = 1; i <= 5; i ++)
    { 
    do
    { 
    var = number.Next(1, 101);
    }
    while(listaNumeros.Contains(var));
    listaNumeros.Add(var); 
    }
    
     
     
    Última edição pelo moderador: 9 de Outubro de 2008
  15. SoundSurfer

    SoundSurfer Power Member

    isso não vai funcionar... ele tenta 5 vezes... se por acaso apanha um repetido, só ficas com 4 números na lista. usa o meu código.
     

Partilhar esta Página