简体   繁体   English

while循环不会中断

[英]while loop does not break out

Doing an exercise and I can't figure out why my while loop isn't escaping, it keeps saying that the values aren't valid even when only digits are entered. 做一个练习,我不知道为什么while循环没有转义,它一直说,即使只输入数字,值也无效。 Any ideas? 有任何想法吗?

 // 31. Karvonen Heart Rate var age, restingPulse, targetRate, numCheckAge, numCheckPulse, valid; valid = false; numCheckAge = /^\\d+$/.test(age); numCheckPulse = /^\\d+$/.test(restingPulse); while(valid === false) { age = parseFloat(prompt("Enter your age:")); restingPulse = parseFloat(prompt("Enter your resting heart rate:")); if(numCheckAge === true && numCheckPulse === true) { valid = true; } else { alert("Sorry. That's not a valid input, please enter numbers."); } } for (var i = 0.55; i < 1; i+=0.05){ targetRate = (((220 - age) - restingPulse) * i) + restingPulse; document.write("Intensity: " + Math.round((i * 100)) + "% | Rate: " + Math.round(targetRate) + "<br>"); } 

At the point where where you test the regular expressions, those variables age and restingPulse are undefined . 在测试正则表达式的位置,那些变量agerestingPulseundefined You'll have to move the code for testing to within the loop, after those variables have received values from user input: 这些变量从用户输入中接收到值之后 ,您必须将用于测试的代码移动到循环内:

while(!valid) {
  age = parseFloat(prompt("Enter your age:"));
  restingPulse = parseFloat(prompt("Enter your resting heart rate:"));

  numCheckAge = /^\d+$/.test(age);
  numCheckPulse = /^\d+$/.test(restingPulse);
  if(numCheckAge && numCheckPulse) {
    valid = true;
  } 
  else {
    alert("Sorry. That's not a valid input, please enter numbers.");
  }
} 

Also, you can drop the === true bits, and use the truth value of the variable directly for testing. 另外,您可以删除=== true位,并将变量的=== true值直接用于测试。

I've simplified and flexified Your code ;) 我已经简化并简化了您的代码;)

Check this out: 看一下这个:

 function requireNumericPrompt(text) { var value; while(true) { if(/^\\d+$/.test(value = prompt(text))) { return value; } alert("Sorry. Please enter valid (numeric) value."); } } var age = parseInt(requireNumericPrompt("Enter your age:")); var restingPulse = parseInt(requireNumericPrompt("Enter your resting heart rate:")); document.write('Age: ' + age + '<br/>'); document.write('Resting pulse: ' + restingPulse + '<br/>'); for (var targetRate, i = 0.55; i < 1; i+=0.05){ targetRate = (((220 - age) - restingPulse) * i) + restingPulse; document.write("Intensity: " + Math.round((i * 100)) + "% | Rate: " + Math.round(targetRate) + "<br>"); } 

 var age, restingPulse, targetRate, numCheckAge, numCheckPulse, valid; valid = false; numCheckAge =function(a) { return /^\\d+$/.test(a); } numCheckPulse = function(a){ return /^\\d+$/.test(restingPulse); } while(valid === false) { age = parseFloat(prompt("Enter your age:")); restingPulse = parseFloat(prompt("Enter your resting heart rate:")); if(numCheckAge(age) && numCheckPulse(restingPulse)) { valid = true; } else { alert("Sorry. That's not a valid input, please enter numbers."); } } for (var i = 0.55; i < 1; i+=0.05){ targetRate = (((220 - age) - restingPulse) * i) + restingPulse; document.write("Intensity: " + Math.round((i * 100)) + "% | Rate: " + Math.round(targetRate) + "<br>"); } 

you need to convert your check code to a function instead a variable. 您需要将检查代码转换为函数而不是变量。

You were on the right track you just forgot to initialize the variable. 您在正确的轨道上,只是忘记了初始化变量。

 var age, restingPulse, targetRate, numCheckAge, numCheckPulse, valid; age = 0; restingPulse = 0; valid = false; numCheckAge = /^\\d+$/.test(age); numCheckPulse = /^\\d+$/.test(restingPulse); while(valid !== true) { age = parseFloat(prompt("Enter your age:")); restingPulse = parseFloat(prompt("Enter your resting heart rate:")); if(numCheckAge === true && numCheckPulse === true) { valid = true; } else { alert("Sorry. That's not a valid input, please enter numbers."); } } for (var i = 0.55; i < 1; i+=0.05){ targetRate = (((220 - age) - restingPulse) * i) + restingPulse; document.write("Intensity: " + Math.round((i * 100)) + "% | Rate: " + Math.round(targetRate) + "<br>"); } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM