Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/08/2010, 17:40
Avatar de _cronos2
_cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Problema con bucles

Hola, estoy trabajando en un script por puro entretenimiento. Este script sirve, en teoría, para que el usuario introduzca un texto, de más o menos carácteres, en un input, y de este texto se seleccionen x letras para ponerlas en mayúsculas. El problema está en que uso varios bucles para recorrer arrays y carácteres, aquí el código:
Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. function alternar(t1, t2){
  3.  var txt = t1.value;
  4.  var aceptados = /[A-z]/;
  5.  var letras = new Array();
  6.  for (a = 0; a<txt.length; a++){
  7.   if(aceptados.test(txt.charAt(a))){
  8.    letras[letras.length] = a;
  9.   }
  10.  }
  11.  var cant = Math.round(Math.random()*letras.length);
  12.  var aleat = new Array();
  13.  for (b = 0; b<cant; b++){
  14.   aleat[b] = Math.round(Math.random()*letras.length);
  15.  }
  16.  for(i = 0; i<cant; i++){
  17.   for(j = 0; j<cant; j++){
  18.    if(aleat[i]==aleat[j] && i!=j){
  19.     if(aleat[j]<letras.length){
  20.      aleat[j] += 1;
  21.     }else{
  22.      aleat[j] -= 1;
  23.     }
  24.    }
  25.   }
  26.  }
  27.  var result = '';
  28.  for(t = 0; t<txt.length; t++){
  29.   if(!(aceptados.test(txt.charAt(t)))){
  30.    result += txt.charAt(t);
  31.   }else{
  32.    for(l = 0; l<letras.length; l++){
  33.     for(r = 0; r<aleat.length; r++){
  34.      if(letras[l] == aleat[r]){
  35.       result += txt.charAt(letras[l]).toUpperCase();
  36.      }else{
  37.       result += txt.charAt(letras[l]);
  38.      }
  39.     }
  40.    }
  41.   }
  42.  }
  43.  t2.value = result;
  44. }
  45. </script>

La cuestión es que si yo por ejempplo pongo 'abc123' (con 3 mayúsculas y posiciones 2, 2 y 3) sale 'aaabbbccCaaabbbccCaaabbbccC123'. Sé que tiene que ser por los bucles porque se repite parte del string pero lo he revisado 40 veces y todavía no logro ver dónde está el error. A ver si me podéis ayudar.
Saludos y gracias :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red