2015-06-24 3 views
0

Я пытаюсь создать массив, перетасовать его, а затем выполнить его в порядке. Однако, когда я перетасовываю его (СТАРТ) более одного раза, это беспорядок! Также, когда вы добираетесь до последнего числа в рандомизированном массиве, это также испортится! пожалуйста, помогите и спасибо!Perfect Randomizer

JS

var minnum = 1; 
var maxnum = 104; 

function start() { 
    var nums = []; 

    while(minnum < maxnum+1){ 
    nums.push(minnum++); 
    } 

    function shuffle(o) { 
    for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x); 
    return o; 
    } 

    var randomnum = shuffle(nums); 
    document.getElementById('txt').innerHTML = randomnum; 
    localStorage["nums"] = JSON.stringify(randomnum); 
    localStorage.setItem("current", 0); 

} 

function Link() { 
    if (localStorage.getItem("current") === null || localStorage.getItem("nums") === null) { 
    start(); 
    } 

    var current = localStorage.getItem("current"); 
    var nums = JSON.parse(localStorage["nums"]); 
    document.getElementById('txt').innerHTML = nums; 
    document.getElementById('txt1').innerHTML = nums[current]; 
    current++; 

    if(current > 103) { 
    location.reload(); 
    start(); 
    current = 0; 
    } 
    localStorage.setItem("current", current); 
} 

HTML

<body> 
    <input type="button" onclick="start()" value="Start" /> 
    <span id="txt"></span> 
    <input type="button" onclick="Link()" value="Next" /> 
    <span id="txt1"></span> 
</body> 
+1

Argh, отступ! – briosheje

+0

«Это беспорядок» как, точно? Какие результаты или ошибки вы получаете, чего вы ожидаете? – ssube

+0

@ Энди: К несчастью, вы ошиблись при фиксации: функция shuffle находится внутри ** функции _start_! (Я имею в виду, что в исходном коде есть) есть _while_ прямо там messing все – briosheje

ответ

0

ошибка, кажется, что minnum И maxnum объявлены вне функции start() и никогда не инициализируется 1 и 104 больше , поэтому всякий раз, когда вы нажимаете start, второй раз первый while не будет толкать ничего nums массив, потому что minnum является 103 (из предыдущего цикла) и maxnum 104.

Fiddle:

http://jsfiddle.net/1pd18eun/1/

код (только что переехал minnum и maxnum внутри):

function start() 
{ 
var minnum = 1; 
var maxnum = 104; 

var nums = []; 
    while(minnum < maxnum+1){ 
     nums.push(minnum++); 
    } 
    var randomnum = shuffle(nums); 
    document.getElementById('txt').innerHTML = randomnum; 
    localStorage["nums"] = JSON.stringify(randomnum); 
    localStorage.setItem("current", 0); 
} 

function shuffle(o) { 
    for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x); 
    return o; 
} 

function Link() 
{ 
    if (localStorage.getItem("current") === null || localStorage.getItem("nums") === null) { 
     start(); 
    } 
    var current = localStorage.getItem("current"); 
    var nums = JSON.parse(localStorage["nums"]); 
    document.getElementById('txt').innerHTML = nums; 
    document.getElementById('txt1').innerHTML = nums[current]; 
    current++; 
    if(current > 103) 
    { 
     location.reload(); 
     start(); 
     current = 0; 
    } 
localStorage.setItem("current", current); 
} 

Кроме того, для ради читателей и хороших людей, начните отступать от своего кода, было очень сложно правильно понять, что вы делаете.