Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Danyx

Gerando números aleatórios em iOs

Recommended Posts

Boa tarde Pessoal,

 

Estou começando a aventurar nos aplicativos da apple. Pois bem estou desenvolvendo um app que o usuário ao clicar no botão Mega sena apareça números aleatórios em ordem crescente de 1 a 60 e sem repetiçao de números.

 

int randomNumber = (arc4random() % 5) + 1;
int randomNumber1 = (arc4random() % 15)+ 1;
int randomNumber2 = (arc4random() % 30)+ 1;
int randomNumber3 = (arc4random() % 40)+ 1;
int randomNumber4 = (arc4random() % 50)+ 1;
int randomNumber5 = (arc4random() % 60)+ 1;


_Resultado.text = [NSString stringWithFormat:@"%i-%i-%i-%i-%i-%i", randomNumber,randomNumber1,randomNumber2,randomNumber3,randomNumber4,randomNumber5];

 

No entanto nesse meu código ae, não está em ordem crescente e aparece números repetidos.

 

Alguem tem uma idéia de implementar isso ae.

 

Desde já agradeço a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem algumas formas de fazer isso, todas envolvem que você coloque os números em uma array, como array só aceita objeto você precisaria trabalhar com NSNumber.

 

Feito isso:

 

1. usando sort descriptor:

 

 

       //Usando sort descriptor para ordenar
       NSSortDescriptor *crescente=[NSSortDescriptor sortDescriptorWithKey:@"intValue" ascending:YES];
       
       //Faz a ordenacao propriamente dita
       [array sortUsingDescriptors:[NSArray arrayWithObjects:crescente,nil]];

Não tenho certeza se vai funcionar dessa forma... teoricamente é para pegar a propriedade do objeto intValue e ordenar a partir daí. Em tese funciona.

 

 

 

2. Fazendo 2 "for"s para ordenar a lista:

 

 

for (int i=0;i<[array size]-1 ;i++ )
{
   for (int j=i+1;j<[array size];j++ )
   {
      if ([array[i] intValue]<[array[j] intValue]){
         NSNumber n=array[i];
         array[i]=array[j];
         array[j]=n;
      }
   }  
}

 

Simples.
Outra coisa... o teu gerador de números está errado... se você quer 6 números que não se repitam você teria que gerar números de 1 a 60 e verificar se os mesmos já não foram cadastrados (uma função para isso viria bem a calhar) e só assim acrescentar na array.
E só parar quando a array tiver a quantidade de números desejados.
Via de regra, se você está usando variavéis numeradas como em randomNumber1/2/3/4/etc você está fazendo algo que poderia ser feito via arrays. Quanto mais genérico for o código, melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.