C# Numero aleatorios diferentes

tig17

Membro
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:
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!
 
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
 
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

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:
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:
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?


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
 
Ordenar um vector também é facílimo.

Código:
 Array.Sort(vector)

Relativamente à segunda hipótese, tens razão.

Era só uma solução. :)
 
Ordenar um vector também é facílimo.

Código:
 Array.Sort(vector)

Relativamente à segunda hipótese, tens razão.

Era só uma solução. :)

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...
 
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
 
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


Vou experimentar... Parece mais simples com o Hashtable... Vamos lá ver xD
 
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);
                }
            }
 
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...

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:
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:
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); 
}

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.
 
Back
Topo