[英]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
. 在测试正则表达式的位置,那些变量
age
和restingPulse
是undefined
。 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.