Foros del Web » Programando para Internet » Javascript »

Math.random con minimo y maximo, sin repeticionesM

Estas en el tema de Math.random con minimo y maximo, sin repeticionesM en el foro de Javascript en Foros del Web. Muy buenas a todos! a ver si a alguien se le ocurre alguna maneras de hacer un numero aleatorio con maximo y minimo y que ...
  #1 (permalink)  
Antiguo 09/12/2008, 07:17
 
Fecha de Ingreso: enero-2008
Mensajes: 58
Antigüedad: 16 años, 3 meses
Puntos: 1
Math.random con minimo y maximo, sin repeticionesM

Muy buenas a todos!
a ver si a alguien se le ocurre alguna maneras de hacer un numero aleatorio con maximo y minimo y que el numero resultante no se repita!

tengo este codigo para crearlo,pues mi fin es seleccionar todas las filas de una tabla y enviarlas y al presentarlas en otra pagina que se presenten de manera aleatoria :

function anadir_aleatorias(){
chk3 = document.getElementsByName('check[]');
var num = chk3.length;
for(i=0;i<chk3.length;i++){
if(!cancion3){
var cancion3 = "";
}else{
cancion3 = cancion3;
}
chk3[i].checked = true;
if(chk3[i].checked){
var x = num++;
var numero = Math.floor((chk3.length-x)*Math.random()+x)
alert(numero);
//cancion3 += chk3[numero].value;
//window.open("agregar_cancion.php?canciones="+canci on3 , "reproductor");
}
}
}

graciass!
  #2 (permalink)  
Antiguo 09/12/2008, 07:35
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Math.random con minimo y maximo, sin repeticionesM

Por lo que entiendo, lo que en realidad quieres es ordenar aleatoriamente un arreglo de objetos que ya tienes, ¿no? Lo digo porque es un poco distinto que simplemente generar números aleatorios y hay mejores formas de hacer esto.

Código javascript:
Ver original
  1. function mezclar(x) {
  2.     var i = x.length;
  3.     while (i>0) {
  4.         k = Math.floor(Math.random()*i);
  5.         i--;
  6.         var temp = x[i];
  7.         x[i] = x[k];
  8.         x[k] = temp;
  9.     }
  10.     return x;
  11. }

En el código que tienes, podrías llamarlo así:
Código javascript:
Ver original
  1. chk3 = document.getElementsByName('check[]'); // El array está ordenado
  2. chk3 = mezclar(chk3); // El array ahora está ordenado aleatoriamente
  #3 (permalink)  
Antiguo 10/12/2008, 05:33
 
Fecha de Ingreso: enero-2008
Mensajes: 58
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Math.random con minimo y maximo, sin repeticionesM

Buenas!
he probado el codigo que me has ofrecido y no me coloca los objetos de manera aleatoria!
los envia tal y como estan ><
el codigo que he utilizado es:
Cita:
function mezclar(x) {
var i = x.length;
while (i>0) {
k = Math.floor(Math.random()*i);
i--;
var temp = x[i];
x[i] = x[k];
x[k] = temp;
}
return x;
}

function anadir_aleatorias(){
chk3 = document.getElementsByName('check[]');
chk3 = mezclar(chk3);
for(i=0;i<chk3.length;i++){
if(!cancion3){
var cancion3 = "";
}else{
cancion3 = cancion3;
}
chk3[i].checked = true;
if(chk3[i].checked){
cancion3 += chk3[i].value +"|";
window.open("agregar_cancion.php?canciones="+canci on3 , "reproductor");
}
}
}
tengo algo mal? gracias!
  #4 (permalink)  
Antiguo 10/12/2008, 06:20
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Math.random con minimo y maximo, sin repeticionesM

Ohm, vaya, no me acordaba que getElementsByName() no devuelve un Array normal...

A ver, prueba así:
Código javascript:
Ver original
  1. function mezclar(x) {
  2.     var i = x.length;
  3.     while (i>0) {
  4.         k = Math.floor(Math.random()*i);
  5.         i--;
  6.         var temp = x[i];
  7.         x[i] = x[k];
  8.         x[k] = temp;
  9.     }
  10.     return x;
  11. }
  12. function anadir_aleatorias(){
  13.     chk3 = document.getElementsByName('check');
  14.     canciones = new Array();
  15.     for(i=0;i<chk3.length;i++){ canciones.push(chk3[i].value); }
  16.     canciones = mezclar(canciones);
  17.     canciones = canciones.join("|");
  18. alert(canciones); // Este alert es para que veas el orden. lo puedes quitar
  19.     window.open("agregar_cancion.php?canciones="+canciones, "reproductor");
  20. }


En tu codigo hay algo un poco raro, que es eso de poner el checked a true y luego comprobar si es true. Lo he quitado. Además, tal como lo tenías se estaban abriendo múltiples ventanas.
  #5 (permalink)  
Antiguo 10/12/2008, 07:03
 
Fecha de Ingreso: enero-2008
Mensajes: 58
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Math.random con minimo y maximo, sin repeticionesM

gracias!
si es cierto que se abrian varias ventanas y por eso de vez en cuando alguna cancion se enviaba varias veces!
este mismo codigo el he utilizado tambien para enviar la informacion tanto ordenada como aleatoriamente!
gracias de nuevo!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:21.