Comunidad de diseño web y desarrollo en internet online

Problema con 2 matrices

Citar            
MensajeEscrito el 19 Sep 2006 09:11 am

Código :

// TENGO UNA MATRIZ CON VARIOS VALORES Y OTRA VACIA
var numerosOriginal = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"];
var numerosPregunta = [""];
// NECESITO COGER 5 VALORES ALEATORIOS DE LA MATRIZ 1 Y PASARLOS A LA 2 
// SIN QUE SE REPITA NINGUNO
for (var i = 0; i<5; i++) {
   var x = Math.floor(Math.random()*numerosOriginal.length);
   trace("x="+numerosOriginal[x]);
   for (y in numerosPregunta) {
      if (numerosPregunta[y] != numerosOriginal[x]) {
         numerosPregunta.push(numerosOriginal[x]);
         break;
      }
   }
}
numerosPregunta.shift();
// PERO EL CASO ES QUE SE REPITEN
trace("matriz2="+numerosPregunta);

Por oxk4r

56 de clabLevel



 

Orense·España

opera
Citar            
MensajeEscrito el 19 Sep 2006 10:06 am

Código :

var i:Number = 0;
while(i<5) {
   var x = Math.floor(Math.random()*numerosOriginal.length);
   trace("x="+numerosOriginal[x]);
var esta:Boolean = false;
   for (y in numerosPregunta) {
      if (numerosPregunta[y] == numerosOriginal[x]) {
esta = true;
break;
      }
   }
if(!esta) {
         numerosPregunta.push(numerosOriginal[x]);
i++;
};
}

Lo que hacía estaba casi bien, comprobabas que no estuviera repetido y si no lo estaba lo añadías, pero ojo, que la comprobación va uno por uno, es decir, supongamos que han salido los números 1,3,5 y vuelve a salir el 3
comprobamos 1 !=3 luego añadimos el 3 (1,3,5,3) y salimos del bucle! mal!

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

clabbrowser
Citar            
MensajeEscrito el 20 Sep 2006 10:54 am
Gracias Conejo, pero la verdad es que llevo dandole vueltas desde ayer y no lo entiendo muy bien el proceso.
No entiendo por que pones el segundo if donde lo pones en lugar de un else o un else if
¿Por que por ejemplo no funciona este codigo? ( se que no funciona pero no entiendo la causa):|

Código :

var numerosOriginal = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"];
var numerosPregunta = [""];
var i:Number = 0;
while (i<5) {
   var x = Math.floor(Math.random()*numerosOriginal.length);
   trace("x="+numerosOriginal[x]);
   var esta:Boolean = false;
   for (y in numerosPregunta) {
      if (numerosPregunta[y] == numerosOriginal[x]) {
         esta = true;
         break;
      } else if (!esta) {
         numerosPregunta.push(numerosOriginal[x]);
         i++;
         break;
      }
   }
}
trace(numerosPregunta);

Por oxk4r

56 de clabLevel



 

Orense·España

firefox
Citar            
MensajeEscrito el 20 Sep 2006 11:04 am
Ambos están DENTRO del bucle y no tiene mucho sentido.

La idea es :
-Tengo un array con valores
-Tengo un valor que quiero comprobar que NO esté en el array

Pasos :
RecorroTODO el array y voy comprobando que no esté.
SÓLO lo añado si NO COINCIDE CON NINGÚN VALOR
(es decir, recorro TODO el array, y si no está en ninguno la variable estase queda en false)
Si coincide con ALGÚN VALOR no tiene sentido seguir recorriendo el array, lo paramos con un break; y ponemos la variable esta a true

Después del bucle (haya recorrido o no todo el array) miramos el valor de la variable esta, si es true es que algún valor coincidía, pues no hacemos nada, si es false es que no coincidía con ninguno, pues lo añadimos

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

clabbrowser
Citar            
MensajeEscrito el 20 Sep 2006 11:05 am
Es que si lo haces así te lo va a comparar solo con el primer elemento de la matriz, y si no coincide lo mete. Lo que te pasó _CONEJO recorre la matriz numerosPregunta buscando el elemento y despues, una vez recorrida toda la matriz, si no lo encontró

Código :

if(!esta)
pues es cuando lo añade. Pero tienes que recorrer toda la matriz buscandolo no meterlo a la primera como hacias tu.....

Por Yranac

421 de clabLevel



Genero:Masculino  

Lugo, Galicia

firefox
Citar            
MensajeEscrito el 23 Sep 2006 11:26 am
Vale, gracias Conejo & Yranac. Pillo el concepto, pero la verdad es que no lo entiendo completamente, creo que me llevara algun tiempo mas.
Solo una ultima cosa: if(!esta) no deberia dar como resultado true?, porque si esta=false, lo contrario (!esta) seria true no?
Gracias por la paciencia. Os kiero.

Por oxk4r

56 de clabLevel



 

Orense·España

firefox
Citar            
MensajeEscrito el 23 Sep 2006 11:30 am
"esta" es una valor booleano 0 y 1 o false y true como lo prefieras
Los condicionales se activan cuando el resultado es 1

Por ejemplo
x = 3
if(x<5) {
trace("El condicional se ejecuta");
};

por ejemplo
if(true) {
trace("este condicional se ejecuta siempre");
};

if(esta) {
trace("Este condicional se ejecuta cuando esta=true");
};

entonces

if(!esta) {
trace("Este condicional se ejecuta cuando !esta=true");
trace("!esta=true implica que esta=false");
};

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

clabbrowser
Citar            
MensajeEscrito el 23 Sep 2006 03:46 pm
Ok, comprendido. Gracias por tu muy detallada explicacion Conejo, te debo una. :D

Por oxk4r

56 de clabLevel



 

Orense·España

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.