Ir para conteúdo

POWERED BY:

Arquivado

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

André Sieiro

Verificando itens repetidos no array

Recommended Posts

Ola gente..

 

Estou fazendo um sorteio de numeros de 1 a 6 e armazenando em um array,

a cada numero sorteado(o sorteio é acionado em um click)

existe um for que verifica se o numero sorteado existe no array ou não, se existe o sorteio é refeito, se não é adicionado ao array de numero sorteados.

 

após sortearem 6 numeros o array é zerado para q seja fetio sortieo de 6 novos numeros de 1 a 6;

 

 

o problema é q cai em um Loop eterno =O

 

o meu codigo está assim

var numeros:Array = new Array()
var verifica:Boolean

var sorteio:int
btnSortear.label = "Sortear"
btnSalvar.label = "Salvar"
txtInput.text = ""

btnSortear.addEventListener(MouseEvent.CLICK, inicio)

function inicio (e:MouseEvent){
	sortear()
	trace(numeros)
	}

function sortear () {
	sorteio = Math.round(Math.random() * 6);
	if (sorteio == 0){
		sortear()}
		
	verificarSorteio()
	adicionarSorteado()
}


function adicionarSorteado () {
	switch(verifica){
		case true:
	        if(numeros.length == 6){
		numeros = new Array()
		numeros.push(sorteio)}
			sortear()
		break;
		case false:
		numeros.push(sorteio)
		break;
	}
}


function verificarSorteio () {
		for (var j:int = 0; j < numeros.length; j++){
			if(sorteio == numeros[j]){
				verifica = true
				j=7
			}
			else{
					verifica= false
			}
		}
}

onde estou errando?

 

desde ja obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema está aqui...

 

function sortear () 
{
        sorteio = Math.round(Math.random() * 6);
        if (sorteio == 0){
                sortear()}
                
        verificarSorteio()
        adicionarSorteado()
}

você está chamando isso de forma recursiva desnecessariamente!!!

 

function sortear ()
{
   while (numeros.length != 6) 
   {
          sorteio = Math.round(Math.random() * 6);
          verificarSorteio();
          adicionarSorteado();
   }
}

Sua lógica está um pouco confusa, mas desse jeito que falei vai funcionar...

 

Porém eu sugiro para o código ficar mais compreensível, reescrever assim:

 

function sortear():void
{
   while (numeros.length != 6) 
   {
          sorteio = Math.round(Math.random() * 6);
          if ( !verificarSorteio( sorteio ) )
          {
            adicionarSorteado( sorteio );
          }
   }
}

function adicionarSorteado ( numero ):void 
{

   if( numeros.length == 6 || numeros.length == 0 )
   {
       numeros = new Array();
   }
             
   numeros.push( numero );
}


function verificarSorteio ( numero ):Boolean 
{
                for (var j:int = 0; j < numeros.length; j++)
                {
                        if(numero == numeros[j]){
                                return true;
                        }
                }
                return false;  
}

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.