我有多个使用参数来计算答案的变量,但是只有当我只有一个带参数的变量时,它似乎才起作用。
我的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"]
很难解释,因为我对参数不太熟悉。
答案 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,整个过程都有点破折的感觉。鉴于此,这是一个可以教的时刻。了解有关切换/案例分支机制的信息,并尝试了解为什么在计算中遇到致命错误。