如何修复无限的while循环和创建函数

问题描述 投票:0回答:2

我正在尝试制作一个利用功能和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>
javascript function while-loop
2个回答
1
投票

您正在创建一个新变量payRateOk(注意小写字母k),而不是写入while循环中检查的变量payRateOK。因此payRateOK将永远不会改变,并且循环将无限执行。


0
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.