计算值时参数过多

时间:2019-07-16 22:03:54

标签: javascript

我有多个使用参数来计算答案的变量,但是只有当我只有一个带参数的变量时,它似乎才起作用。

我的HTML是:

function calculateAnswer() {
   var givenInput = document.getElementById('given').value;
   var road_s = givenInput.match(/s=(.*)(;)/);                               //looks for S= (road)
   var time_t = givenInput.match(/t=(.*)(;)/);                               //looks for t= (time)
   var speed_v = givenInput.match(/v=(.*)(;)/);                           //looks for v= (speed)

   var toFind = document.getElementById('result').value;

   var resv = road_s[1] / time_t[1];

    if (toFind === "v") {
        document.getElementById('answer').innerHTML = resv;
        document.getElementById('errorAlerts').innerHTML = "";
    } else {
        document.getElementById('errorAlerts').innerHTML = "ERROR... invalid requested result";
    }
}

当我摆脱其他变量:水草休息时,它起作用。

这是起作用的

var resv = road_s[1] / time_t[1];
var ress = speed_v[1] * time_t[1];
var rest = road_s[1] / speed_v[1];

我需要它来使用road_s [1],time_t [1]和speed_v [1]打印出答案,但是当我使用这些参数添加更多变量时

function calculateAnswer() {
    var givenInput = document.getElementById('given').value;
    var road_s = givenInput.match(/s=(.*)(;)/);                               //looks for S= (road)
    var time_t = givenInput.match(/t=(.*)(;)/);                               //looks for t= (time)
    var speed_v = givenInput.match(/v=(.*)(;)/);                              //looks for v= (speed)

    var toFind = document.getElementById('result').value;

    var resv = road_s[1] / time_t[1];
    var ress = speed_v[1] * time_t[1];
    var rest = road_s[1] / speed_v[1];

    if (toFind === "v") {
        document.getElementById('answer').innerHTML = resv;
        document.getElementById('errorAlerts').innerHTML = "";
    } else {
        document.getElementById('errorAlerts').innerHTML = "ERROR... invalid requested result";
    }
    if (toFind === "s") {
        document.getElementById('answer').innerHTML = ress;
        document.getElementById('errorAlerts').innerHTML = "";
    } else {
        document.getElementById('errorAlerts').innerHTML = "ERROR... invalid requested result";
    }
    if (toFind === "t") {
        document.getElementById('answer').innerHTML = rest;
        document.getElementById('errorAlerts').innerHTML = "";
    } else {
        document.getElementById('errorAlerts').innerHTML = "ERROR... invalid requested result";
    }
}

系统没有打印出任何东西

let numbers = [
    "1, 2, 3, 4",
    "5, 6, 7, 8",
    "3, 4, 5, 6",
    "1, 2, 7, 8",
    "1, 2, 3, 4",
    "3, 4, 5, 6",
    "1, 2, 3, 4"]

很难解释,因为我对参数不太熟悉。

1 个答案:

答案 0 :(得分:0)

因此,这里发生了一些事情。首先,当您使用match的正则表达式时(根据您已评论的输入),您将始终拥有不匹配的三个之一。给定注释输入,speed_v将为null,并且将在三个方程式中的两个方程式中导致致命错误。在出现第一个致命错误时,程序将停止。

为解决此问题,我对您的比赛陈述做了一些改动:

var road_s = givenInput.match(/s=(.*)(;)/) || [null, 0];   //looks for S= (road)
var time_t = givenInput.match(/t=(.*)(;)/) || [null, 0];   //looks for t= (time)
var speed_v = givenInput.match(/v=(.*)(;)/) || [null, 0];  //looks for v= (speed)

在每种情况下,如果match返回null,则||运算符(逻辑或)会加入,并创建一个包含[null, 0]的“虚拟数组”,从而为缺少的选项提供一个值,每次。

您遇到的第二个问题是在您的if语句中。在每个分支中,您说“如果选择的选项是某某某某,则显示计算。如果没有,请显示错误!每种选择都在发生这种情况。

一种更好的方法可能是使用switch语句,让您注意每种可能的结果:

    switch(toFind){
      case 'v':
        document.getElementById('answer').innerHTML = resv;
        document.getElementById('errorAlerts').innerHTML = "";
        break;
      case 's':
        document.getElementById('answer').innerHTML = ress;
        document.getElementById('errorAlerts').innerHTML = "";
        break;
      case 't':
        document.getElementById('answer').innerHTML = rest;
        document.getElementById('errorAlerts').innerHTML = "";
        break;
      default:
        document.getElementById('errorAlerts').innerHTML = "ERROR... invalid requested result";
    }

要将其视为可行的解决方案,请查看以下副本:https://repl.it/@TobiasParent/tooManyArgsSO

编辑:我知道这是一个hacky解决方案,但让我们面对现实吧-HTML是hacky,输入是hacky,整个过程都有点破折的感觉。鉴于此,这是一个可以教的时刻。了解有关切换/案例分支机制的信息,并尝试了解为什么在计算中遇到致命错误。