Javascript 而循环不会中断
在做一个练习时,我不明白为什么我的while循环没有转义,它总是说即使只输入了数字,值也无效。有什么想法吗Javascript 而循环不会中断,javascript,for-loop,while-loop,Javascript,For Loop,While Loop,在做一个练习时,我不明白为什么我的while循环没有转义,它总是说即使只输入了数字,值也无效。有什么想法吗 //31。卡沃宁心率 var age、restingPulse、targetRate、numCheckAge、numCheckPulse、有效; 有效=错误; numCheckAge=/^\d+$/.test(年龄); numCheckPulse=/^\d+$/.test(restingPulse); while(有效===false){ age=parseFloat(提示(“输入您的年
//31。卡沃宁心率
var age、restingPulse、targetRate、numCheckAge、numCheckPulse、有效;
有效=错误;
numCheckAge=/^\d+$/.test(年龄);
numCheckPulse=/^\d+$/.test(restingPulse);
while(有效===false){
age=parseFloat(提示(“输入您的年龄:”);
restingPulse=parseFloat(提示(“输入您的静息心率:”);
if(numCheckAge==true&&numCheckPulse==true){
有效=真;
}否则{
警报(“对不起,这不是有效的输入,请输入数字。”);
}
}
对于(var i=0.55;i<1;i+=0.05){
targetRate=((220-年龄)-静止脉冲)*i)+静止脉冲;
文件。书写(“强度:+Math.round((i*100))+”%|;比率:+Math.round(targetRate)+“
”;
}
在测试正则表达式的地方,那些变量age
和restingPulse
是未定义的。在这些变量接收到来自用户输入的值后,您必须将用于测试的代码移动到循环中:
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.");
}
}
此外,您还可以删除===true
位,直接使用变量的真值进行测试。我已经简化并调整了代码;)
看看这个:
功能要求数字提示(文本){
var值;
while(true){
如果(/^\d+$/.test(值=提示(文本))){
返回值;
}
警报(“对不起,请输入有效(数字)值。”);
}
}
var age=parseInt(requireNumericPrompt(“输入您的年龄:”);
var restingPulse=parseInt(requireNumericPrompt(“输入您的静息心率:”);
文件。写入('Age:'+Age+'
');
写入('Resting pulse:'+Resting pulse+'
');
对于(var targetRate,i=0.55;i<1;i+=0.05){
targetRate=((220-年龄)-静止脉冲)*i)+静止脉冲;
文件。书写(“强度:+Math.round((i*100))+”%|;比率:+Math.round(targetRate)+“
”;
}
var age,restingPulse,targetRate,numCheckAge,numCheckPulse,valid;
有效=错误;
numCheckAge=函数(a){
返回/^\d+$/.test(a);
}
numCheckPulse=函数(a){
返回/^\d+$/.test(restingPulse);
}
while(有效===false){
age=parseFloat(提示(“输入您的年龄:”);
restingPulse=parseFloat(提示(“输入您的静息心率:”);
if(numCheckAge(年龄)和numCheckPulse(静止脉冲)){
有效=真;
}否则{
警报(“对不起,这不是有效的输入,请输入数字。”);
}
}
对于(var i=0.55;i<1;i+=0.05){
targetRate=((220-年龄)-静止脉冲)*i)+静止脉冲;
文件。书写(“强度:+Math.round((i*100))+”%|;比率:+Math.round(targetRate)+“
”;
}
您的思路是正确的,只是忘记了初始化变量
var age,restingPulse,targetRate,numCheckAge,numCheckPulse,valid;
年龄=0;
静止脉冲=0;
有效=错误;
numCheckAge=/^\d+$/.test(年龄);
numCheckPulse=/^\d+$/.test(restingPulse);
while(有效!==true){
age=parseFloat(提示(“输入您的年龄:”);
restingPulse=parseFloat(提示(“输入您的静息心率:”);
if(numCheckAge==true&&numCheckPulse==true){
有效=真;
}否则{
警报(“对不起,这不是有效的输入,请输入数字。”);
}
}
对于(var i=0.55;i<1;i+=0.05){
targetRate=((220-年龄)-静止脉冲)*i)+静止脉冲;
文件。书写(“强度:+Math.round((i*100))+”%|;比率:+Math.round(targetRate)+“
”;
}
您需要在循环内的正则表达式上执行测试
s(在输入age
和restingPulse
之后)。使用调试器会立即显示numCheckAge
和numCheckPulse
仅设置一次,并且以后不会更新…而且,您可以使用isNaN(age)
而不是regex来检查输入是否是一个数字(:注意,如果他们实际期望使用/\d+$/的浮点值不匹配,因为浮点值将转换为字符串,并且该模式将不匹配小数验证0值?为什么?原因是,由于您使用JavaScript模拟OOP,除非该变量具有静态存储空间,否则其初始值是不确定的。确定。但它将如何检查enterif语句之前的ed数据:if(numCheckAge==true&&numCheckPulse==true){
?