2014-10-21 2 views
-1

У меня есть задание прямо сейчас, которое требует, чтобы я использовал Math.random(), хранящийся в переменной, которую я назвал randomNumberBetween0and5 (Это фактически Math.floor((Math.random() * 5) + 0);, которая возвращает число от 0 до 5. Я использую это число, чтобы ссылаться на индекс некоторых массивов в другом месте код.) Я называю это еще дважды в моем коде, но мне нужно, чтобы Math.random() выполнялся только один раз, а затем сохранил его значение в переменной randomNumberBetween0and5 для последующего использования без изменения, если я вызову переменную два или три раза.Как я могу заставить Math.random() возвращать другое значение каждый раз, когда я вызываю переменную, в которой она хранится?

Я попытался сохранить значение randomNumberBetween0and5 в другой переменной и (как ожидалось), что не помогло. Любая помощь, безусловно, будет оценена! Спасибо!

(Вот весь код только в случае, если вы хотели бы видеть его.)

var names = ["Lázaro", "Aviram", "Samuel", "Miles", "Felix"]; // Defining an array of random names 
var people = []; // Declaring the array to hold each instance of the 'Person' object 

// For() to create one new instance thrice for three names of the 'names' array in the 'Person' object defined in 'person.js' 

for (var i=0;i < 3;i++) { 
    var randomNumberBetween0and5 = Math.floor((Math.random() * 5) + 0); // Randomly choosing a number for the arrays to be passed to the 'Person()' object's methods defined in 'person.js' 
    var newInstance = new Person.generate(names.splice(randomNumberBetween0and5,randomNumberBetween0and5+1),Person.actions[randomNumberBetween0and5],Person.jobs[randomNumberBetween0and5],i+1); // Creating a new instance of the 'Person()' object and passing a random name, action (from the Person object's properties), and job (also from the Person object's properties), along with the current loop number for the row to use (i begins at 0 so it becomes 1,2,3 instead of 0,1,2 when a 1 is added) 
    //people.push(newInstance); // Adding the new instance to the 'people' array of instances 
    people.push(newInstance); // Adding the newly created instance of 'Person' to the variable 'people' 
}; // Ending the for() 

console.log(people); // Logging the 'people' array for debugging 
console.log("Main.js has been completely interpreted -- Nothing has broken yet."); // Reassuring console log to state that this file has completely executed without breaking 
+1

Если вы сохраните номер в переменной, он останется установленным и не изменится ... это цель переменных в языках программирования: сохранить данные. Вы делаете что-то еще с этой переменной, иначе это невозможно, так или иначе. –

+0

@MarcoBonelli 'variable' и' keep data' в том же предложении не подходит. Может быть, 'constant' будет более уместным, но не совсем правильным. – silentw

+0

'Math.random()' находится в переменной. Это означает, что значение переменных изменяется каждый раз, когда оно вызывается. Я полагаю, что константа может не позволить изменять значение после того, как 'Math.random()' устанавливает его, но я почти уверен, что у JavaScript нет констант. –

ответ

1

Может быть, этот отрывок объясняет:

// When Math.floor is initially called it creates the random number 
// store this in variable: randomNumberBetween0and5 
var randomNumberBetween0and5 = Math.floor((Math.random() * 5) + 0); 

for (var i = 0; i < 10; i++) { 
    // randomNumberBetween0and5 will never change in this function 
    console.log(randomNumberBetween0and5); 
} 

Проблема в коде является то, что вам вызовите Math.floor в цикле. это всегда создаст случайное.

Попробуйте это с кодом:

var names = ["Lázaro", "Aviram", "Samuel", "Miles", "Felix"]; 
var people = []; 
var randomNumberBetween0and5 = Math.floor((Math.random() * 5) + 0); 

for (var i=0;i < 3;i++) { 
    console.log('randomNumberBetween0and5 is: ' + randomNumberBetween0and5); 
    var newInstance = new Person.generate(names.splice(randomNumberBetween0and5,randomNumberBetween0and5+1),Person.actions[randomNumberBetween0and5],Person.jobs[randomNumberBetween0and5],i+1); 
    people.push(newInstance); 
}; 
+0

Это именно то, что у меня есть в моем источнике, но 'randomNumberBetween0and5' _is_ меняется во время цикла' for() '. –

+0

, но это ВНУТРИ петли. Переместите его снаружи. – Daniel

+0

Я переместил его выше (под мои первые две объявления переменных), и это все еще происходит :( –

0

Это нормально, если вы сделаете randomNumberBetween0and5 на массив так, что он может хранить 3 разных номеров одновременно?

var randomNumberBetween0and5 = []; 
for(var i = 0; i < 3; i++){ 
    randomNumberBetween0and5.push(Math.floor(Math.random()*5)); 
    //do stuff with randomNumberBetween0and5[i] 
} 
0

FYI Math.random() возвращает число между 0 и 1. Умножив его на 5 вы получите число между 0 и 5. Вам нужно Math.round (Math.random() * 5) правильно установите свою переменную. Math.floor позволит вам получить 5 в результате, пока Math.random вернет ровно 1, что, я думаю, никогда не будет.

+0

Если вы хотите получить более по-настоящему рандомизированный результат, вы можете сделать Math.floor (Math .random() * 6), так как тогда равное предпочтение будет даваться всем значениям от 0 до 5 –

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