Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

185
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!