我正在尝试制作一个利用功能和while循环的薪水检查程序。在此程序中,我必须创建两个函数,一个用于验证工资率和工时,然后一个用于计算。另外,我必须让第一个函数将小时数和工资率传递给计算函数,然后再将其传递回第一个函数。当我尝试使用第一个功能运行程序时,似乎如果我在7.25以下输入工资额,它将进入无限循环。
这里是代码
<script>
function payValidate(x)
{
if(isNaN(payRate) || payRate < 7.25 || payRate > 20)
{
return false;
}
else
{
return true;
}
}
function hoursValidate(x)
{
if(isNaN(hours) || hours < 1 || hours > 60)
{
return false;
}
else
{
return true;
}
}
var grossPay;
var withHolding;
var netPay;
var message;
var payRate = parseInt(prompt("Enter pay rate"));
var payRateOK = payValidate(payRate);
while(!payRateOK)
{
payRate = parseInt(prompt("Invalid pay rate. Enter pay rate again"));
payRateOk = payValidate(payRate);
}
var hours = parseFloat(prompt("Enter hours worked"));
var hoursOK = hoursValidate(hours);
while(!hoursOK)
{
hours = parseFloat(prompt("Invalid hours. Enter hours again"));
hoursOK = hoursValidate(hours);
}
grossPay = payRate * hours;
if(grossPay <= 300)
{
withHolding = grossPay * 0.10;
}
else
{
withHolding = grossPay * 0.12;
}
netPay = grossPay - withHolding;
var message = "Pay Rate: $" + payRate.toFixed(2) +
"\nHours Worked: " + hours +
"\nGross Pay $" + grossPay.toFixed(2) +
"\nWithholding $" + withHolding.toFixed(2) +
"\nNet Pay $" + netPay.toFixed(2);
alert(message);
</script>
您正在创建一个新变量payRateOk
(注意小写字母k),而不是写入while循环中检查的变量payRateOK
。因此payRateOK将永远不会改变,并且循环将无限执行。
var payRateOK = payValidate(payRate); // In here you have used "payRateOK"
while(!payRateOK)
{
payRate = parseInt(prompt("Invalid pay rate. Enter pay rate again"));
payRateOk = payValidate(payRate); // In here you have used "payRateok"
}
[payRateOK != payRateOk
那里您必须使用相同的名称
其他是payRate
是浮点变量。您应该使用var payRate = parseFloat
而不是var payRate = parseInt
。
您使用小时作为int
类型,因此var hours = parseFloat
应该是var hours = parseInt