求解数组 Javascript 中的随机数和随机变量
Solving random numbers and random variables from array Javascript
window.onload = start;
var nr1 = Math.floor(Math.random()*50);
var nr2 = Math.floor(Math.random()*50);
var eq1 = nr1 +"+"+nr2;
var eq2 = nr1 + "-"+ nr2;
var eq3 = nr1 +"*"+ nr2;
var eq4 = nr1 +"/"+ nr2;
var arr = [eq1,eq2,eq3,eq4];
var eq = arr[Math.floor(Math.random()*arr.length),Math.floor(Math.random()*arr.length)];
我想练习一些东西,制作一个基本的数学游戏。上面是我试图用来生成随机数和随机方程的代码,我想从我的 html 中得出这些代码。我之所以给运算符加上“”是因为我希望整个方程式以文本形式出现,我试过没有“”标记,我直接得到了答案。
function start() {
document.getElementById("submit").onclick = submitans;
document.getElementById("question").innerHTML = eq;
}
这是我生成方程式的启动函数。现在这在 html 中非常有效,如果你看这张照片 --
HTML。我的问题是,我不知道如何将方程连接到输入框中的 "if(statement)"。因为脚本将命令读取为文本,所以即使我写
它也不起作用
function submitans() {
var correct = "Correct!";
var wrong = "Wrong";
var inn = parseInt(document.getElementById("answer").value);
for (var i = 0; i < eq.length; i++) {
if(inn === eq[i])
document.getElementById("input").innerHTML = "correct";
}
}
我是否可以通过这个脚本达到我想要的目标?我坚持使用纯 javascript,因为我只是一个初学者,我真的很想学习它。所以我宁愿不使用 jquery.
除此之外,我打算让我的脚本显示每个正确答案的分数,我想目标是最多有 10 个正确答案,并且允许用户有 5 个错误。
我会改变你管理方程式的方式...也许类似的东西可能有用:
function eq(x, y, op){
// Find the result depending on the operation
var res;
switch (op){
case: '+':
res = x + y;
break;
case: '-':
res = x - y;
break;
case: '*':
res = x * y;
break;
case: '/':
res = x / y;
break;
default:
throw "Error";
}
// Or something like is more compact
var res2 = op == '+' ? x+y : op == '-' ? x-y : op == '*' ? x*y : op == '/' ? x/y : null;
return {
text: x + op + y,
res: res
}
}
// ...
var eq1 = eq(nr1, nr2, '+');
var eq2 = eq(nr1, nr2, '-');
var eq3 = eq(nr1, nr2, '*');
var eq4 = eq(nr1, nr2, '/');
然后你只需要在 HTML 中显示 eq.text
并检查 eq.res
以与答案进行比较...也许你可以做一些更好的事情但它应该有效
您也可以使用 eval 函数来获取答案。
var answer = eval(document.getElementById("question").innerHTML)
得到正确答案
在第一段代码中,您可以为每个方程添加答案
var eq1 = nr1 +"+"+nr2;
var eq2 = nr1 + "-"+ nr2;
var eq3 = nr1 +"*"+ nr2;
var eq4 = nr1 +"/"+ nr2;
//answers
var ans1 = nr1 +"+"+nr2;
var ans2 = nr1 + "-"+ nr2;
var ans3 = nr1 +"*"+ nr2;
var ans4 = nr1 +"/"+ nr2;
然后当你得到随机方程时你也得到了它的答案
var arr = [eq1,eq2,eq3,eq4];
var ansArr = [ans1, ans2, ans3, ans4];
var eqNumber = Math.floor(Math.random()*arr.length);
var eq = arr[eqNumber];
var ans = ansArr[eqNumber];
并像这样编辑最后一个片段
function submitans() {
var correct = "Correct!";
var wrong = "Wrong";
var inn = parseInt(document.getElementById("answer").value);
//for (var i = 0; i < eq.length; i++) {//delete
if(inn == ans)
document.getElementById("input").innerHTML = correct;
else
document.getElementById("input").innerHTML = wrong;
//}//delete
}
-------------------------------------------- ----------------------------------
或者您也可以像这样只更改最后一段代码,而不是全部更改
function submitans() {
var correct = "Correct!";
var wrong = "Wrong";
var inn = parseInt(document.getElementById("answer").value);
//for (var i = 0; i < eq.length; i++) {//delete
if(inn == eval(eq))
document.getElementById("input").innerHTML = correct;
else
document.getElementById("input").innerHTML = wrong;
//}//delete
}
eval 将 运行 文本作为 javascript 并且它将 return 方程式的答案。
eval()
应该很好用,试试这个:
function submitans() {
var correct = "Correct!";
var wrong = "Wrong";
var inn = parseInt(document.getElementById("answer").value);
if(inn === eval(document.getElementById("question").innerHTML))
document.getElementById("input").innerHTML = correct;
else
document.getElementById("input").innerHTML = wrong;
}
parseInt 和 Number 有区别
var inn = parseInt(document.getElementById("answer").value);
var inn = Number(document.getElementById("input").value);
==========================
eval() 你需要小心。更重要的是 javascript 将如何解释给定的
字符串
var ans1 = eval( 4-3/2*39+3)
添加括号将确保您得到正确的结果,得到您希望 evel() 到 return 的答案。
var ans2 = eval( (4-((3/2)*39))+3 );
var ans3 = eval(document.getElementById("equation").value);
很可能会return喜欢ans1,小心!
解决上述问题...
var eq1a = nr1 +"+"+nr2;
var eq1b = nr1 + nr2
var eq2a = nr1 + "-"+ nr2;
var eq2b = nr1 - nr2
var eq3a = nr1 +"*"+ nr2;
var eq3b = nr1 * nr2
var eq4a = nr1 +"/"+ nr2;
var eq4b = nr1 / nr2
以上很简单......
下一步
var eq1 = "nr1 + nr2"
var eq2 = "nr1 - nr2"
var eq3 = "nr1 * nr2"
var eq4 = "nr1 / nr2"
以上是你可以做的字符串...
var nr1 = Math.floor(Math.random()*50);
var nr2 = Math.floor(Math.random()*50);
var eq1 = "nr1 + nr2"
document.getElementById("equation").innerHTML = eq1;
//and it will show correctly.
var ans = eval(eq1);
// and it will give you the answer
并更进一步....
var eq1 = "((nr1 + nr2) * 4 / 4)"
document.getElementById("equation").innerHTML = eq1.regex();
var ans = eval(eq1);
我忘记了需要将什么放在 regex() 括号中以删除 ( 和 ) 括号。所以它不会将它们打印到等式 html 元素。
====================
如果应用程序是关键应用程序,请小心使用 eval()。您的应用程序可能会很快被黑。
window.onload = start;
var nr1 = Math.floor(Math.random()*50);
var nr2 = Math.floor(Math.random()*50);
var eq1 = nr1 +"+"+nr2;
var eq2 = nr1 + "-"+ nr2;
var eq3 = nr1 +"*"+ nr2;
var eq4 = nr1 +"/"+ nr2;
var arr = [eq1,eq2,eq3,eq4];
var eq = arr[Math.floor(Math.random()*arr.length),Math.floor(Math.random()*arr.length)];
我想练习一些东西,制作一个基本的数学游戏。上面是我试图用来生成随机数和随机方程的代码,我想从我的 html 中得出这些代码。我之所以给运算符加上“”是因为我希望整个方程式以文本形式出现,我试过没有“”标记,我直接得到了答案。
function start() {
document.getElementById("submit").onclick = submitans;
document.getElementById("question").innerHTML = eq;
}
这是我生成方程式的启动函数。现在这在 html 中非常有效,如果你看这张照片 -- HTML。我的问题是,我不知道如何将方程连接到输入框中的 "if(statement)"。因为脚本将命令读取为文本,所以即使我写
它也不起作用 function submitans() {
var correct = "Correct!";
var wrong = "Wrong";
var inn = parseInt(document.getElementById("answer").value);
for (var i = 0; i < eq.length; i++) {
if(inn === eq[i])
document.getElementById("input").innerHTML = "correct";
}
}
我是否可以通过这个脚本达到我想要的目标?我坚持使用纯 javascript,因为我只是一个初学者,我真的很想学习它。所以我宁愿不使用 jquery.
除此之外,我打算让我的脚本显示每个正确答案的分数,我想目标是最多有 10 个正确答案,并且允许用户有 5 个错误。
我会改变你管理方程式的方式...也许类似的东西可能有用:
function eq(x, y, op){
// Find the result depending on the operation
var res;
switch (op){
case: '+':
res = x + y;
break;
case: '-':
res = x - y;
break;
case: '*':
res = x * y;
break;
case: '/':
res = x / y;
break;
default:
throw "Error";
}
// Or something like is more compact
var res2 = op == '+' ? x+y : op == '-' ? x-y : op == '*' ? x*y : op == '/' ? x/y : null;
return {
text: x + op + y,
res: res
}
}
// ...
var eq1 = eq(nr1, nr2, '+');
var eq2 = eq(nr1, nr2, '-');
var eq3 = eq(nr1, nr2, '*');
var eq4 = eq(nr1, nr2, '/');
然后你只需要在 HTML 中显示 eq.text
并检查 eq.res
以与答案进行比较...也许你可以做一些更好的事情但它应该有效
您也可以使用 eval 函数来获取答案。
var answer = eval(document.getElementById("question").innerHTML)
得到正确答案
在第一段代码中,您可以为每个方程添加答案
var eq1 = nr1 +"+"+nr2;
var eq2 = nr1 + "-"+ nr2;
var eq3 = nr1 +"*"+ nr2;
var eq4 = nr1 +"/"+ nr2;
//answers
var ans1 = nr1 +"+"+nr2;
var ans2 = nr1 + "-"+ nr2;
var ans3 = nr1 +"*"+ nr2;
var ans4 = nr1 +"/"+ nr2;
然后当你得到随机方程时你也得到了它的答案
var arr = [eq1,eq2,eq3,eq4];
var ansArr = [ans1, ans2, ans3, ans4];
var eqNumber = Math.floor(Math.random()*arr.length);
var eq = arr[eqNumber];
var ans = ansArr[eqNumber];
并像这样编辑最后一个片段
function submitans() {
var correct = "Correct!";
var wrong = "Wrong";
var inn = parseInt(document.getElementById("answer").value);
//for (var i = 0; i < eq.length; i++) {//delete
if(inn == ans)
document.getElementById("input").innerHTML = correct;
else
document.getElementById("input").innerHTML = wrong;
//}//delete
}
-------------------------------------------- ----------------------------------
或者您也可以像这样只更改最后一段代码,而不是全部更改
function submitans() {
var correct = "Correct!";
var wrong = "Wrong";
var inn = parseInt(document.getElementById("answer").value);
//for (var i = 0; i < eq.length; i++) {//delete
if(inn == eval(eq))
document.getElementById("input").innerHTML = correct;
else
document.getElementById("input").innerHTML = wrong;
//}//delete
}
eval 将 运行 文本作为 javascript 并且它将 return 方程式的答案。
eval()
应该很好用,试试这个:
function submitans() {
var correct = "Correct!";
var wrong = "Wrong";
var inn = parseInt(document.getElementById("answer").value);
if(inn === eval(document.getElementById("question").innerHTML))
document.getElementById("input").innerHTML = correct;
else
document.getElementById("input").innerHTML = wrong;
}
parseInt 和 Number 有区别
var inn = parseInt(document.getElementById("answer").value);
var inn = Number(document.getElementById("input").value);
==========================
eval() 你需要小心。更重要的是 javascript 将如何解释给定的
字符串var ans1 = eval( 4-3/2*39+3)
添加括号将确保您得到正确的结果,得到您希望 evel() 到 return 的答案。
var ans2 = eval( (4-((3/2)*39))+3 );
var ans3 = eval(document.getElementById("equation").value);
很可能会return喜欢ans1,小心!
解决上述问题...
var eq1a = nr1 +"+"+nr2;
var eq1b = nr1 + nr2
var eq2a = nr1 + "-"+ nr2;
var eq2b = nr1 - nr2
var eq3a = nr1 +"*"+ nr2;
var eq3b = nr1 * nr2
var eq4a = nr1 +"/"+ nr2;
var eq4b = nr1 / nr2
以上很简单......
下一步
var eq1 = "nr1 + nr2"
var eq2 = "nr1 - nr2"
var eq3 = "nr1 * nr2"
var eq4 = "nr1 / nr2"
以上是你可以做的字符串...
var nr1 = Math.floor(Math.random()*50);
var nr2 = Math.floor(Math.random()*50);
var eq1 = "nr1 + nr2"
document.getElementById("equation").innerHTML = eq1;
//and it will show correctly.
var ans = eval(eq1);
// and it will give you the answer
并更进一步....
var eq1 = "((nr1 + nr2) * 4 / 4)"
document.getElementById("equation").innerHTML = eq1.regex();
var ans = eval(eq1);
我忘记了需要将什么放在 regex() 括号中以删除 ( 和 ) 括号。所以它不会将它们打印到等式 html 元素。
====================
如果应用程序是关键应用程序,请小心使用 eval()。您的应用程序可能会很快被黑。