Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

189
Visualizações
No entiendo por qué while se ejecuta nuevamente después de ignorar un comando

Tengo este código en JS

 //param A : array of integers //param B : array of integers //return an integer function doesitwork(A, B) { if (A.length != B.length) { return -1; } var i = 0; var tank; var count; var johnny = true; for (var j = 0; j < A.length; j++) { count = 0; tank = 0; i = j; johnny = true; while (count < A.length && johnny == true) { console.log(i); console.log(A.length); console.log(count); console.log(johnny); tank += A[i]; if (B[i] <= tank) tank -= B[i]; else { johnny = false; } count++; i++; if (i == A.length) i == 0; } while (johnny == true) { if (count == A.length) return j; } } return -1; } var A = [1, 2]; var B = [2, 1]; console.log(doesitwork(A, B));

Lo que no entiendo es cuando ejecuto el programa, al principio cuenta = 0, pero cuando entro por primera vez en el ciclo while, en lugar de ejecutar el comando contar ++ y cambiar su valor a 1, no lo ejecuta , mantiene la cuenta en 0 y luego la cambia después de volver a entrar en el bucle.

TLDR: mientras que el bucle se ejecuta dos veces con una de las variables que permanece con el mismo valor en lugar de cambiarlo como sugiere una de las líneas en el bucle.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

No está claro qué está tratando de hacer, pero la condición del ciclo while no siempre será cierta, lo que hace que count= 0 dentro del ciclo for . Entonces, necesitas poner var count =0;

 //param A : array of integers //param B : array of integers //return an integer function doesitwork(A, B) { if (A.length != B.length) { return -1; } var i = 0; var tank; var count=0; var johnny = true; for (var j = 0; j < A.length; j++) { tank = 0; i = j; johnny = true; while (count < A.length && johnny == true) { console.log(i); console.log(A.length); console.log(count); console.log(johnny); tank += A[i]; if (B[i] <= tank) tank -= B[i]; else { johnny = false; } count++; i++; if (i == A.length) i == 0; } while (johnny == true) { if (count == A.length) return j; } } return -1; } var A = [1, 2]; var B = [2, 1]; console.log(doesitwork(A, B));

about 4 years ago · Juan Pablo Isaza Relatório

0

TLDR: mientras que el bucle se ejecuta dos veces con una de las variables que permanece con el mismo valor en lugar de cambiarlo como sugiere una de las líneas en el bucle.

Está asumiendo que el count nunca se incrementó, porque está asumiendo que el ciclo while continúa por segunda vez. En realidad, el bucle while sale después de una sola iteración y el bucle for reinicia la count a 0 . Luego se ingresa nuevamente al ciclo while , pero con un valor diferente para j .

Detalles

La primera vez que pasa por su ciclo while , B[i] es 2 y A[i] es 1 . tank += A[i] hace que tank tenga un valor de 1 . Por lo tanto, b[i] <= tank es false , por lo que establece johnny en false . Eso significa que al final de esa iteración, su condición while ( ... && johnny == true ) es false , por lo que no continúa con el ciclo while por segunda vez.

En su lugar, el control se traslada al bucle for , que restablece la count a 0 .

Para depurar problemas como este en el futuro, es útil aprender a usar el depurador: puede colocar un punto de interrupción donde desee y ver cómo fluye el control y cómo cambian las variables a medida que avanza. Si encuentra que eso no es posible, es posible que deba ser aún más detallado con su registro, como se muestra a continuación.

 //param A : array of integers //param B : array of integers //return an integer function doesitwork(A, B) { if (A.length != B.length) { return -1; } var i = 0; var tank; var count; var johnny = true; for (var j = 0; j < A.length; j++) { console.log("entering for loop"); count = 0; tank = 0; i = j; johnny = true; while (count < A.length && johnny == true) { console.log("entering while loop"); console.log("i", i); console.log("j", j); console.log("A.length", A.length); console.log("count", count); console.log("johnny", johnny); tank += A[i]; if (B[i] <= tank) tank -= B[i]; else { console.log(B[i], tank, "setting johnny to false"); johnny = false; } count++; i++; if (i == A.length) i == 0; } while (johnny == true) { if (count == A.length) return j; } } return -1; } var A = [1, 2]; var B = [2, 1]; console.log(doesitwork(A, B));

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda