2014-11-25 5 views
1

Im делает случайное изображение как часть лаборатории, и я не могу получить третье изображение, чтобы появиться (scissors.png). Thats мой javascript ниже ... Помощник был бы очень признателен!Javascript Случайное изображение

var total = 0; 
function Images(){ 
    var img1 = document.getElementById('img1'); 
    var x = Math.floor(Math.random()*2)+1; 

    /* Player one */ 

    if (x ==1) 
     img1.src = 'rock.png'; 
    else if (x==2) 
     img1.src = 'paper.png'; 
    else if (x==3) 
     img1.src = 'scissors.png'; 

} 
+0

try Math.floor (Math.random() * 3) +1 – Cracker0dks

+0

@vp_arth - я редактировал его код. – vsync

ответ

3

Я делаю случайное отображение изображения как часть лаборатории, и я не могу появиться третье изображение (scissors.png).

Это потому, что вы умножаете свое случайное число на 2, а затем настираете его, что дает вам диапазон 0-2 (включительно); что не является проблемой (с учетом массивов с нулевым основанием), но ваш if ожидает одномерные индексы массива.

Кстати, я хотел бы предложить:

var images = ['rock', 'paper', 'scissors'], 
    rand = Math.floor(Math.random() * images.length); 

return images[rand] + '.png'; 

ведущий к реализации так:

function getImage() { 
 
    var images = ['rock', 'paper', 'scissors'], 
 
    rand = Math.floor(Math.random() * images.length); 
 

 
    return images[rand] + '.png'; 
 
} 
 

 
document.querySelector('button').addEventListener('click', function() { 
 
    console.log(getImage()); 
 
});
<button>Get an image</button>

2

Попробуйте это:

var x = Math.floor(Math.random()*3)+1; 

Я также предлагаю вам использовать: if (x === 1).

+1

'===', для чего? может ли Math.floor вернуться не int? –

+0

Это просто считается хорошей практикой в ​​программировании, или так я слышал.Это уменьшает вероятность случайной оценки. – DeFeNdog

+0

Douglas Crockford описывает == как злые близнецы в Javascript The Good Parts, O'Rielly. – DeFeNdog

0
function Images(){ 
    var rand = Math.floor(Math.random()*3), // pick a random number: 0, 1 or 2 
     results = [rock, paper, scissors]; // Array of names, ordered. 

    // pick the right index from the array, so if the random number was '1', 
    // so the value at that index is used, which is "paper". 
    document.getElementById('img1').src = results[rand] + '.png'; 
} 
+1

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего после. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. – msrd0

+0

ну, они могут сравнить код вопроса с кодом ответа и узнать разницу. Код действительно объясняет сам себя, это основные основы javascript, ничего необычного или сложного. Я добавлю комментарии с тех пор, как вы спросили, но это ненужно ИМХО. – vsync

+0

Это, вероятно, как самокомментация, как может комментировать комментарии. При этом автор, вероятно, мог бы извлечь выгоду из объяснения того, что он сделал не так (то есть, его «случайный» не собирается возвращаться 3) – Compass

0

Просто измените множитель 3.
Или даже к переменной, что равно числу результатов возможно.

Math.random возвращение нас 0 <= r < 1.
Затем, умножая, мы можем получить 0 <= r*n < n поплавковые номера.
Math.floor заставить нас целые числа 0 <= k < n или, что равно 0 <= k <= n-1
Вы должны добавить 1 к этой последовательности, если вы хотите получить [1, n],
но [0, n-1] является наилучшим для индекса массива с длиной n.

Вот пример реализации:

function action(images){ 
    document.getElementById('img1').src = 
       images[Math.floor(Math.random()*images.length)]; 
} 

action([ 
    'rock.png', 
    'scissors.png', 
    'paper.png', 
    'lizard.gif', 
    'Spok.jpg' 
]); 
+1

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. – msrd0

+0

Я не думаю, что такие вопросы, как «Вот мой код, что не так?» Полезны для будущих читателей. Но вы правы, да. –

0

Javascript Math.random() возвращает значение с плавающей точкой между диапазоне [0, 1) - смысл в том числе 0, но до 1 за исключением 1.

So , максимальное значение равно 0.99 * 2 = 1.98 и с шагом 1 равно 2.98. Значение Этаж что 2.

простое решение было бы просто умножить его на 3.

0
Math.random() ∈ [0,1) 
⇒ Math.random() * 2 ∈ [0,2) 
⇒ Math.floor(Math.random()*2) ∈ [0,1] ∩ ℤ = {0,1} 
⇒ Math.floor(Math.random()*2) + 1 ∈ {1,2} 

Если вы хотите номер набора {1,2,3}, нужно умножить на 3:

Math.random() ∈ [0,1) 
⇒ Math.random() * 3 ∈ [0,3) 
⇒ Math.floor(Math.random()*3) ∈ [0,2] ∩ ℤ = {0,1,2} 
⇒ Math.floor(Math.random()*3) + 1 ∈ {1,2,3} 
+0

Этот ответ не будет отображаться хорошо, если ваш браузер не может отображать символы юникода. – Oriol