伙计们,我正在做这个小项目,我必须在其中随机生成2个数字和运算符。然后,我必须将该方程的结果存储在具有3个随机生成的数字的数组中。然后,所有这些结果将显示在按钮上,用户可以通过单击正确的答案进行选择。
我已经到了代码可以生成数字和运算符的地步,但是我得到正确结果并生成其他随机三个结果的代码似乎不起作用。有谁知道如何解决?预先谢谢你!
<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>
答案 0 :(得分:1)
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];
}
答案 1 :(得分:0)
我认为您需要传递一些类似.method(5,2).. .method(rnum1,rnum2)
的参数答案 2 :(得分:0)
方法generateRandomOperatorAndCorrectResult
从不调用该方法。
var correctResult = (operators[selectedOperator].method);
正在将方法函数分配给CorrectResult变量。在JavaScript中,函数是对象。因此,correctResult是类型函数的对象。并且您需要在该行的变量分配之后调用该函数。
您可以执行correctResult(rnum1, rnum2)
或operators[selectedOperator].method(rnum1, rnum2)
但是,您无法在上述调用中访问rnum1和rnum2。您可以将rnum1,rnum2用作全局变量。 (尽管我不建议这样做)。您可以将rnum1和rnum2作为参数传递给generateRandomOperatorAndCorrectResult
函数中的results
数组也是如此。您也可以通过。它们将作为引用传递,就像数组通过JavaScript中的引用传递一样,因此您在函数中所做的任何操作都将反映在本地范围之外。
除了在generateRandomOperatorAndCorrectResult
方法内部之外,我也看不到其他任何地方创建的结果。如果您在另一个地方将其创建为全局变量,则它可能存在。但是从提供的代码来看,每个方法中的结果变量似乎都是断开的。