Javascript 如何通过几个函数计算一个简单的方程?(DOM)
嘿,伙计们,我正在做一个小项目,我必须随机生成2个数字和运算符。然后我必须将这个方程的结果存储在一个包含3个随机生成的数字的数组中。之后,所有这些结果都将显示在按钮上,用户可以通过单击正确答案进行选择 我已经到了生成数字和运算符的地步,但是我得到正确结果并生成其他三个随机结果的代码似乎不起作用。有人知道怎么修吗?提前谢谢你Javascript 如何通过几个函数计算一个简单的方程?(DOM),javascript,dom,Javascript,Dom,嘿,伙计们,我正在做一个小项目,我必须随机生成2个数字和运算符。然后我必须将这个方程的结果存储在一个包含3个随机生成的数字的数组中。之后,所有这些结果都将显示在按钮上,用户可以通过单击正确答案进行选择 我已经到了生成数字和运算符的地步,但是我得到正确结果并生成其他三个随机结果的代码似乎不起作用。有人知道怎么修吗?提前谢谢你 <div id="count"> <div id="text">
<div id="count">
<div id="text">
</div>
</div>
<script>
window.addEventListener('load', function() {
var rnum1 = generateRandomNumber1 ();
var rnum2 = generateRandomNumber2 ();
var randomOperator = generateRandomOperatorAndCorrectResult ();
document.querySelector("#text").textContent = "How much is " + rnum1 + randomOperator + rnum2 + "?";
});
function generateRandomOperatorAndCorrectResult () {
var operators = [{
sign: "+",
method: function(rnum1,rnum2){ return rnum1 + rnum2; } },
{
sign: "*",
method: function(rnum1,rnum2){ return rnum1 * rnum2; } },
{
sign: "-",
method: function(rnum1,rnum2){ return rnum1 - rnum2; }
}];
var results = [];
var selectedOperator = Math.floor(Math.random()*operators.length);
var randomOperator = operators[selectedOperator].sign;
var correctResult = (operators[selectedOperator].method); //til this point it works
results.push(correctResult);
return randomOperator;
return results;
}
function generateRandomResults () {
for(var i=0; i < 4; i++) {
results.push((Math.floor(Math.random() * 400) + 1))}
return results;
}
function generateRandomNumber1 () {
var rnum1 = (Math.floor(Math.random() * 20) + 1);
return rnum1;}
function generateRandomNumber2 () {
var rnum2 = (Math.floor(Math.random() * 20) + 1);
return rnum2;}
</script>
addEventListener('load',function()){
var rnum1=generateRandomNumber1();
var rnum2=generateRandomNumber2();
var randomOperator=GeneratorAndCorrectResult();
document.querySelector(“#text”).textContent=“多少是”+rnum1+randomOperator+rnum2+”;
});
函数生成器DomainOperator和CorrectResult(){
var运算符=[{
符号:“+”,
方法:函数(rnum1,rnum2){return rnum1+rnum2;},
{
符号:“*”,
方法:函数(rnum1,rnum2){return rnum1*rnum2;},
{
符号:“-”,
方法:函数(rnum1,rnum2){返回rnum1-rnum2;}
}];
var结果=[];
var selectedOperator=Math.floor(Math.random()*operators.length);
var randomOperator=运算符[selectedOperator]。符号;
var correctResult=(运算符[selectedOperator].method);//直到此时为止
结果。推送(纠正结果);
返回随机算子;
返回结果;
}
函数生成器域结果(){
对于(变量i=0;i<4;i++){
results.push((Math.floor(Math.random()*400)+1)))
返回结果;
}
函数生成器DomainNumber1(){
var rnum1=(Math.floor(Math.random()*20)+1);
返回rnum1;}
函数生成器DomainNumber2(){
var rnum2=(Math.floor(Math.random()*20)+1);
返回rnum2;}
我认为您需要像这样传递一些参数。方法(5,2)。方法(rnum1、rnum2)
。
.
方法
generaterandomoperator和correctResult
从未调用该方法
var correctResult=(运算符[selectedOperator].method)代码>正在将方法函数分配给correctResult变量。在JavaScript中,函数是对象。所以correctResult是function类型的对象。您需要在该行的变量赋值之后调用函数
您可以执行correctResult(rnum1,rnum2)
或运算符[selectedOperator]。方法(rnum1,rnum2)
但是,您无权访问上述调用中的rnum1和rnum2。您可以将rnum1、rnum2作为全局变量来实现这一点。(尽管我不这么认为)。您可以将rnum1和rnum2作为参数传递给generaterandomoperator和correctResult
函数中的结果
数组也是如此。你也可以通过。它们将作为引用传递,就像数组在JavaScript中通过引用传递一样,因此您在函数中所做的任何操作都将反映在本地范围之外
除了在generaterandomoperator和correctResult
方法中之外,我在任何地方都看不到创建的结果。如果您在另一个地方创建了它作为全局变量,那么它可能存在。但是从提供的代码来看,每个方法中的results变量似乎是断开连接的。不能使用两个return
语句返回两个值。第一个结束函数。要获得复合结果,需要另一个数组或对象。
var rnum1 = generateRandomNumber1 ();
var rnum2 = generateRandomNumber2 ();
//pass the random numbers to the function
var data= generateRandomOperatorAndCorrectResult(rnum1,rnum2);
//data=["+", [5]]
var operator=data[0];
var result= data[1];
function generateRandomOperatorAndCorrectResult (num1, num2) {
var operators = [{
sign: "+",
method: function(rnum1,rnum2){ return rnum1 + rnum2; } },
{
sign: "*",
method: function(rnum1,rnum2){ return rnum1 * rnum2; } },
{
sign: "-",
method: function(rnum1,rnum2){ return rnum1 - rnum2; }
}];
var results = [];
var selectedOperator =
Math.floor(Math.random()*operators.length);
var randomOperator = operators[selectedOperator].sign;
var correctResult = (operators[selectedOperator].method(num1, num2)); //pass the numbers to the methods
results.push(correctResult);
//return multiple values
return [randomOperator,results];
}