Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaScript函数滞后了一个周期,并且_Javascript_Algorithm_Time_Base 60 - Fatal编程技术网

javaScript函数滞后了一个周期,并且

javaScript函数滞后了一个周期,并且,javascript,algorithm,time,base-60,Javascript,Algorithm,Time,Base 60,我一直在忙于编写代码,但我并没有停止编写程序。它有很多代码,所以我把它做成了一个代码笔。以下是链接: *depen.io/animalZero/pen/jaerjQ 我知道它说你必须输入代码笔附带的代码(冗余),但是javascript本身就是330个HTML,CSS也有数百行,我需要每行按空格键4次吗?呃,技术细节 到现在为止,我已经从中找出了大部分bug(我可能从8月份开始在JS中编写代码,我在行业中工作)。我最喜欢JS的算法脚本部分,我的程序就是这么做的 这里的问题是actualHours

我一直在忙于编写代码,但我并没有停止编写程序。它有很多代码,所以我把它做成了一个代码笔。以下是链接:

*depen.io/animalZero/pen/jaerjQ


我知道它说你必须输入代码笔附带的代码(冗余),但是javascript本身就是330个HTML,CSS也有数百行,我需要每行按空格键4次吗?呃,技术细节

到现在为止,我已经从中找出了大部分bug(我可能从8月份开始在JS中编写代码,我在行业中工作)。我最喜欢JS的算法脚本部分,我的程序就是这么做的

这里的问题是actualHoursF()函数应该计算模拟的小时数,并在simActual框中给出一个值。我想我在做傻事。当您单击“计算”按钮时,它会填充模拟总数,但我在该按钮上有多个事件侦听器,actualHoursF()就是其中之一。如果再次单击该按钮,actualHoursF()函数会将sim总计相加,但此时我的其他函数正在向表中注入与actualHours总计不匹配的新数据。它落后一个周期。如果有人能帮我,我会很高兴的

另一个问题是我的sim卡总数有时会出现NaN。我注意到只有当newEndTime()生成一个正整数时才会发生这种情况。newEndTime基本上取endTimeEntry中输入的结束时间,然后随机加上或减去0到3之间的数字,给出一个模拟时间。我还应该提到,newStartTime对startTimeEntry也做了同样的事情。我的“cleanUpXXX”函数是从基数为10的数学转换成基数为60的数学,在某些条件下减去40,在其他条件下不使用它。其中有4个,两个用于手动输入的时间,两个用于模拟的时间。底部还有一个函数叫做“newSimStart”,它从第2行开始,用上一次迭代的结束时间覆盖模拟的开始时间(非常酷,嗯:微微一笑:),这使它更真实。提前感谢各位,我知道它有很多代码,而且写得不是很好。我也有一些愚蠢的变量名,我知道我不应该这么做,但我太懒了。谢谢


PS我可以根据需要提供更多信息。我在免费代码营上发布了这篇文章,但这篇文章被mods掩埋了,因为它连接到了一个两个月前的死文章上,所以我来向你们寻求帮助。

说实话,你们的代码有很多问题。大量重复,有些函数什么都不做,变量什么也不去,等等。计算可以压缩成一行,所有的条件都可以压缩,所以它们只改变重要的部分,而不是重复整个大量的代码块。但这不是,所以我会坚持主要的错误

主要问题在于,您正在将多个异步事件侦听器附加到单击处理程序。因为它们是异步的,所以它们可以按自己喜欢的任何顺序运行。因此,某些函数所需的某些内容在执行时不可用。解决这个问题的最简单方法就是创建一个事件处理程序,然后按照您希望的顺序运行函数。实际上,代码应该是更好的结构和分离的,但是NaN问题是通过整合它们来解决的

编辑: 刚刚注意到一个很大的错误是,您的两行代码是错误的。奇怪命名的
wooHoo
变量试图在设置前引用
remainingMinutes

var wooHoo = remainingMinutes + bigNoRemainder;
var remainingMinutes = startingMinutes % 100;
但同样,你也可以改变这一点:

var hundreds3 = startingMinutes / 100;
var noRemainder = Math.floor(hundreds3);
var bigNoRemainder = noRemainder * 60;
var wooHoo = remainingMinutes + bigNoRemainder;
var remainingMinutes = startingMinutes % 100;
var secondHalf = (remainingMinutes / 100) * 60;
var eleFun = secondHalf + bigNoRemainder
var superMinutes = remainingMinutes / 60;
var whatEvs = secondHalf + sixties;
simActual[i].value = (wooHoo / 60).toFixed(2);
。。。有点时髦的东西:

var bigNoRemainder = Math.floor(startingMinutes / 100) * 60;
var remainingMinutes = startingMinutes % 100;
simActual[i].value = ((remainingMinutes + bigNoRemainder) / 60).toFixed(2);
我还想展示如何在保持可读性的同时,使用整个
actualHoursF
函数和一半的行数:

function actualHoursF() {
  for (var i = 0; i < simActual.length; i++) {
    if (startTimeEntry[i].value !== "") {

      var startingMinutes = simEnd[i].value - simStart[i].value;
      var remainingMinutes = startingMinutes % 100;
      var noRemainder = Math.floor(startingMinutes / 100);
      var bigNoRemainder = Math.floor(startingMinutes / 100) * 60;
      var totalMinutes = (noRemainder * 60) + remainingMinutes;

      if (startingMinutes < 60) {
        simActual[i].value = (startingMinutes / 60).toFixed(2);
      }
      else if (startingMinutes > 100 && startingMinutes < 130) {
        simActual[i].value = ((remainingMinutes / 60) + noRemainder).toFixed(2);
      }
      else if (startingMinutes > 130) {
        simActual[i].value = ((remainingMinutes + bigNoRemainder) / 60).toFixed(2);
      }
      else {
        simActual[i].value = (totalMinutes / 100).toFixed(2);
      }
    }
  }
}
函数实际值hoursf(){
对于(变量i=0;i100和启动分钟数<130){
simActual[i].值=((剩余分钟/60)+noRemainder).toFixed(2);
}
否则,如果(启动分钟数>130){
simActual[i].value=((remainingMinutes+bigNoRemainder)/60.toFixed(2);
}
否则{
simActual[i]。值=(总分钟数/100)。toFixed(2);
}
}
}
}
修正代码: 除了一些从未调用过的函数的格式化和删除之外,您的大部分代码都保持不变:

var workOrderEntry = document.querySelectorAll(".workOrder");
var startTimeEntry = document.querySelectorAll(".startTime");
var endTimeEntry = document.querySelectorAll(".endTime");
var hoursTotal = document.querySelectorAll(".totalHours");
var simStart = document.querySelectorAll(".simStart");
var simEnd = document.querySelectorAll(".simEnd");
var simActual = document.querySelectorAll(".simActual");
var calc = document.querySelector("#calculate");
var moreLines = document.querySelector("#moreLines");
var tableRow = document.querySelector(".row");
var bigTotal = document.querySelector(".bigTotal");
var bigActual = document.querySelector(".bigActual");
/*----------------------------------------------------*/

function totalCalc() {
  var smallTotal = 0;
  for (i = 0; i < hoursTotal.length; i++) {
    var numberU = parseFloat(hoursTotal[i].value, 10);
    if (hoursTotal[i].value != 0) {
      smallTotal += numberU;
      bigTotal.value = smallTotal + " rough hours";
    }
  }
}

function actualCalc() {
  var smallActual = 0;
  for (i = 0; i < simActual.length; i++) {
    var numberW = parseFloat(simActual[i].value, 10);
    if (simActual[i].value != 0) {
      smallActual += numberW;
      bigActual.value = smallActual.toFixed(2) + " actual hours";
    }
  }
}

function newStartTime() {

  for (var i = 0; i < startTimeEntry.length; i++) {
    var randomStart = Math.random();
    if (startTimeEntry[i].value !== "") {
      if (randomStart > 0.5) {
        if (startTimeEntry[i].value.charAt(2) !== "3" &&
          startTimeEntry[i].value.charAt(2) !== "1" &&
          startTimeEntry[i].value.charAt(2) !== "4") {
          var randomNum = (Math.random() * 3);
        }
        else if (startTimeEntry[i].value.charAt(2) === "3") {
          randomNum = (Math.random() * 3);
        }
        else if (startTimeEntry[i].value.charAt(2) === "1") {
          randomNum = (Math.random() * 3);
        }
        else if (startTimeEntry[i].value.charAt(2) === "4") {
          randomNum = (Math.random() * 3);
        }
        else randomNum = (Math.random() * 3) - 40;
      }
      else if (randomStart < 0.5) {

        if (startTimeEntry[i].value.charAt(2) !== "3" &&
          startTimeEntry[i].value.charAt(2) !== "1" &&
          startTimeEntry[i].value.charAt(2) !== "4") {

          randomNum = (Math.random() * -3) - 40;
        }
        else if (startTimeEntry[i].value.charAt(2) === "3") {
          randomNum = (Math.random() * -3);
        }
        else if (startTimeEntry[i].value.charAt(2) === "1") {
          randomNum = (Math.random() * -3);
        }
        else if (startTimeEntry[i].value.charAt(2) === "4") {
          randomNum = (Math.random() * -3);
        }
        else randomNum = (Math.random() * -3) - 40;
      }
      var roundNum = Math.floor(randomNum)
      var numberx = parseInt(startTimeEntry[i].value);
      simStart[i].value = (roundNum + numberx);
      if (simStart[i].value < 1000) {
        simStart[i].value = "0" + (roundNum + numberx);
      }
    }
  }
}

//there is something adding 40 to the starttimeentry
//need to fix tha

function newEndTime() {

  for (var i = 0; i < endTimeEntry.length; i++) {
    var randomStart = Math.random();
    if (endTimeEntry[i].value !== "") {
      if (randomStart > 0.5) {
        if (endTimeEntry[i].value.charAt(2) !== "3" &&
          endTimeEntry[i].value.charAt(2) !== "1" &&
          endTimeEntry[i].value.charAt(2) !== "4") {
          var randomNum = (Math.random() * 3);
        }
        else if (endTimeEntry[i].value.charAt(2) === "3") {
          randomNum = (Math.random() * 3);
        }
        else if (endTimeEntry[i].value.charAt(2) === "1") {
          randomNum = (Math.random() * 3);
        }
        else if (endTimeEntry[i].value.charAt(2) === "4") {
          randomNum = (Math.random() * 3);
        }
        else randomNum = (Math.random() * 3) - 40;
      }
      else if (randomStart < 0.5) {

        if (endTimeEntry[i].value.charAt(2) !== "3" &&
          endTimeEntry[i].value.charAt(2) !== "1" &&
          endTimeEntry[i].value.charAt(2) !== "4") {

          randomNum = (Math.random() * -3) - 40;
        }
        else if (endTimeEntry[i].value.charAt(2) === "3") {
          randomNum = (Math.random() * -3);
        }
        else if (endTimeEntry[i].value.charAt(2) === "1") {
          randomNum = (Math.random() * -3);
        }
        else if (endTimeEntry[i].value.charAt(2) === "4") {
          randomNum = (Math.random() * -3);
        }
        else randomNum = (Math.random() * -3) - 40;
      }
      var roundNum = Math.floor(randomNum)
      var numberx = parseInt(endTimeEntry[i].value);
      simEnd[i].value = (roundNum + numberx);
      if (simEnd[i].value < 1000) {
        simEnd[i].value = "0" + (roundNum + numberx);
      }
    }
  }
}

function totalHoursF() {
  for (var i = 0; i < hoursTotal.length; i++) {
    if (startTimeEntry[i].value !== "") {
      if (startTimeEntry[i].value.charAt(3) == "5" || startTimeEntry[i].value.charAt(2) == "3") {
        var numberx = parseInt(startTimeEntry[i].value);
        var wig = numberx + 40;
        if (startTimeEntry[i].value < 1000) {
          startTimeEntry[i].value = "0" + wig;
        }
        else startTimeEntry[i].value = wig;
      }
      var startingMinutes = (endTimeEntry[i].value - startTimeEntry[i].value);
      var hundreds = startingMinutes / 100;
      var noRemainder = Math.floor(hundreds);
      var sixties = noRemainder * 60;
      var remainingMinutes = startingMinutes % 100;
      var totalMinutes = sixties + remainingMinutes;
      hoursTotal[i].value = totalMinutes / 60;
    }
  }
}

function cleanUpStartEntry() {
  for (var i = 0; i < hoursTotal.length; i++) {
    if (startTimeEntry[i].value.charAt(2) == "5" || startTimeEntry[i].value.charAt(2) == "7" || startTimeEntry[i].value.charAt(2) == "8") {
      var numberY = startTimeEntry[i].value - 40;
      startTimeEntry[i].value = numberY;
      if (startTimeEntry[i].value < 1000) {
        startTimeEntry[i].value = "0" + numberY;
      }
    }
  }
}

function cleanUpEndEntry() {
  for (var i = 0; i < hoursTotal.length; i++) {
    if (startTimeEntry[i].value.charAt(2) == "5" || endTimeEntry[i].value.charAt(2) == "7") {
      var numberY = endTimeEntry[i].value - 40;
      endTimeEntry[i].value = numberY;
      if (endTimeEntry[i].value < 1000) {
        endTimeEntry[i].value = "0" + numberY;
      }
    }
  }
}

function cleanUpSimStart() {
  for (var i = 0; i < simActual.length; i++) {
    if (simStart[i].value.charAt(2) == "8" || simStart[i].value.charAt(2) == "7" || simStart[i].value.charAt(2) == "9" || simStart[i].value.charAt(2) == "6") {
      var numberY = simStart[i].value - 40;
      simStart[i].value = numberY;
      if (simStart[i].value < 1000) {
        simStart[i].value = "0" + numberY;
      }
      //remember need to add startTimeEntry into this too
    }
  }
}

function cleanUpSimEnd() {
  for (var i = 0; i < simActual.length; i++) {
    if (simEnd[i].value.charAt(2) == "8" || simEnd[i].value.charAt(2) == "7" || simEnd[i].value.charAt(2) == "9" || simEnd[i].value.charAt(2) == "6") {
      var numberY = simEnd[i].value - 40;
      simEnd[i].value = numberY;
      if (simEnd[i].value < 1000) {
        simEnd[i].value = "0" + numberY;
      }
    }
  }
}

function actualHoursF() {
  for (var i = 0; i < simActual.length; i++) {
    if (startTimeEntry[i].value !== "") {
      var startingMinutes = (simEnd[i].value - simStart[i].value);
      if (startingMinutes < 60) {
        var hundreds1 = startingMinutes / 60;

        simActual[i].value = (hundreds1).toFixed(2);
      }
      else if (startingMinutes > 100 && startingMinutes < 130) {
        var hundreds2 = startingMinutes / 100;
        var noRemainder = Math.floor(hundreds2);
        var sixties = noRemainder * 60;
        var remainingMinutes = startingMinutes % 100;
        var secondHalf = (remainingMinutes / 100) * 60;
        var superMinutes = remainingMinutes / 60;
        var percentage = remainingMinutes / 100;
        var extraMinutes = percentage * 60;
        var totalMinutes = sixties + extraMinutes;
        var whatEvs = secondHalf + sixties;
        simActual[i].value = (superMinutes + noRemainder).toFixed(2);
      }
      else if (startingMinutes > 130) {
        var hundreds3 = startingMinutes / 100;
        var noRemainder = Math.floor(hundreds3);
        var bigNoRemainder = noRemainder * 60;
        var wooHoo = remainingMinutes + bigNoRemainder;
        var remainingMinutes = startingMinutes % 100;
        var secondHalf = (remainingMinutes / 100) * 60;
        var eleFun = secondHalf + bigNoRemainder
        var superMinutes = remainingMinutes / 60;
        var whatEvs = secondHalf + sixties;
        simActual[i].value = (wooHoo / 60).toFixed(2);
      }
      else {
        var hundreds4 = startingMinutes / 100;
        var noRemainder = Math.floor(hundreds4);
        var sixties = noRemainder * 60;
        var remainingMinutes = startingMinutes % 100;
        var totalMinutes = sixties + remainingMinutes;
        var percentage = totalMinutes / 100;
        simActual[i].value = (percentage).toFixed(2);
      }
    }
  }
}

function newSimStart() {
  for (var i = 1; i < simEnd.length; i++) {
    if (startTimeEntry[i].value !== "") {
      simStart[i].value = simEnd[i - 1].value;
    }
  }
}

calc.addEventListener("click", function () {
  totalCalc();
  actualCalc();
  newStartTime();
  newEndTime();
  totalHoursF();
  cleanUpStartEntry();
  cleanUpEndEntry();
  cleanUpSimStart();
  cleanUpSimEnd();
  actualHoursF();
  newSimStart();
});

setTimeout(cleanUpStartEntry, 5000);
setTimeout(cleanUpEndEntry, 5000);
setTimeout(cleanUpSimStart, 5000);
setTimeout(cleanUpSimEnd, 5000);
var workOrderEntry=document.queryselectoral(“.workOrder”);
var starttimementry=document.queryselectoral(“.startTime”);
var endTimeEntry=document.querySelectorAll(“.endTime”);
var hoursTotal=document.querySelectorAll(“.totalHours”);
var simStart=document.queryselectoral(“.simStart”);
var simEnd=document.querySelectorAll(“.simEnd”);
var simActual=document.queryselectoral(“.simActual”);
var calc=document.querySelector(“计算”);
var moreLines=document.querySelector(“moreLines”);
var tableRow=document.querySelector(“.row”);
var bigTotal=document.querySelector(“.bigTotal”);
var bigActual=document.querySelector(“.bigActual”);
/*----------------------------------------------------*/
函数totalCalc(){
var-smallTotal=0;
为了=