es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué mi loop de Javascript solo se ejecuta una vez?

var board = ''
for (i=1;i<5;i++){
for (i=1;i<9;i++){
if (i%2 == 0){
board += "#";
}
else{
board += "O";
}
}
board += "\n"
for (i=0;i<8;i++){
if (i%2 == 0){
board += "#";
}
else{
board += "O";
}
}
board += "\n"
}
console.log(board);

Cuando intento ejecutar este código, la salida es
“` O#O#O#O #

O#O#O#O


La salida prevista es la siguiente:

O#O#O#O#

O#O#O#O

O#O#O#O#

O#O#O#O

O#O#O#O#

O#O#O#O

O#O#O#O#

O#O#O#O

Intenté agregar un console.log(i) justo después de la primera declaración for y solo devuelve “1”, lo que significa que el bucle solo se ejecuta una vez.
¿Por qué está sucediendo esto?

*Edit: Cuando envuelvo los dos bucles for internos en una función y llamo a esa función en su lugar, funciona como se espera

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que la variable “i” se está utilizando como la variable del iterador para los tres bucles for. Esto significa que cada vez que se ejecuta el bucle más interno, se está reiniciando el valor de “i” a 0, haciendo que el bucle solo se ejecute una vez. Para solucionar esto, debería utilizarse una variable diferente para cada bucle.

    Una forma de arreglar el código es utilizar diferentes nombres de variables para cada bucle, como se muestra a continuación:

    var tablero = '';
    for (var i=1; i<5; i++){
      for (var j=1; j<9; j++){
        if (j%2 == 0){
          tablero += "#";
        }
        else{
          tablero += "O";
        }
      }
      tablero += "\n";
      for (var k=0; k<8; k++){
        if (k%2 == 0){
          tablero += "#";
        }
        else{
          tablero += "O";
        }
      }
      tablero += "\n";
    }
    console.log(tablero);
    

    Alternativamente, como se menciona en la parte editada de la pregunta, los dos bucles for interiores pueden envolverse en una función para asegurarse de que la variable “i” no se sobrescriba:

    var tablero = '';
    for (var i=1; i<5; i++){
      tablero += construirFila();
      tablero += "\n";
      tablero += construirFila();
      tablero += "\n";
    }
    
    function construirFila() {
      var fila = '';
      for (var i=1; i<9; i++){
        if (i%2 == 0){
          fila += "#";
        }
        else{
          fila += "O";
        }
      }
      return fila;
    }
    
    console.log(tablero);
    

Comments are closed.