2014-02-12 2 views
0

Натолкнулся на некоторые проблемы с возвратом вычисленного значения функции, находящейся внутри массива. и был бы признателен за любую помощь в решениях, а также за советы по более элегантным способам решения этой проблемы (например, более логичный способ решить эту проблему)Возвращаемое значение функции из массива с использованием случайного выбора

Я пытаюсь создать программу, которая генерирует две случайные цифры и случайный оператор для применения к указанным цифрам.

var num1 = Math.floor(Math.random() * 20 + 1); 
console.log(num1); 
var num2 = Math.floor(Math.random() * 1000 + 21); 
console.log(num2); 

Я изначально установить мой случайный оператор так:

var ops = ["+", "-", "*", "/"] 

Я пытался использовать функцию math.random, чтобы выбрать случайное число для индекса массива Ops, но получаю все виды ошибок , поэтому я начал поиск и нашел полезный совет: How to use Javascript to ask the user random math questions?, но не смог найти способ получить случайное значение от объекта (cf. Access non-numeric Object properties by index?), поэтому я вернулся к использованию массива из 4 функций, каждый из которых который имеет возвращаемое значение, которое вычисляет случайные числа (num1 и num2) на основе случайного оператора.

Я получил все, чтобы работать (т. Е. Протестировал свои функции случайных чисел, и даже вижу, что моя переменная newOp каждый раз возвращает другую функцию из массива ops), но вот что я не могу получить программа для выполнения: вернуть вычисленное значение функции. Когда я

alert(newOp) 

Я хочу, чтобы предупредить значение функции вместо самой функции. (например, alert -> 20 вместо того, что я сейчас получаю: -> function a() {return (num1 + num2)}

Вот мой код. Все советы и понимание приветствуются! Просто попробуйте учиться.

var num1 = Math.floor(Math.random() * 20 + 1); 
console.log(num1); 
var num2 = Math.floor(Math.random() * 1000 + 21); 
console.log(num2); 
var ops = [ 
    function a(){return (num1 + num2)}, 
    function b(){return (num1 - num2)}, 
    function c(){return (num1 * num2)}, 
    function d(){return (num1/num2)}]; 

var problem = function() { 
    var random = Math.floor(Math.random()* 4 + 0); 
    var newOp = ops[random]; 
    alert(newOp); 
}; 
problem(); 
+0

A [случайное число] (http://www.xkcd.com/221/)? 'return 4; // выбрано честным рулоном кости –

ответ

1

Я думаю, вам просто нужно изменить его на:.

alert(newOp()); 

Ваш массив содержит ссылки на функции, но вы не вызываете их.

+0

Блестящий! Рад, что это было не совсем в обратном направлении и только незначительная ошибка. В следующий раз я обязательно буду более подробно объяснять. Ура! – Jim

1

Я думаю, что вы просто не хватает фактического вызова

Изменение alert(newOp); в alert(newOp());

Смежные вопросы