2013-04-24 37 views
-5

我試圖實現Fisher–Yates shuffle,但是當我用一個警報測試下面的代碼時,它似乎沒有循環。我想,它會在第一次後停止。實現一個Fisher-Yates隨機循環不起作用

function scrambleWord() { 
    var letterArray = currentWord.split(""); 
    var m = letterArray.length, t, i; 
    while (m) { 
     x = Math.floor(Math.random() * m--); 
     t = letterArray[m]; 
     letterArray[m] = array[i]; 
     array[i] = t; 
    } 
    scrambledWord = letterArray.join(""); 
} 

回答

0

arrayicurrentWord從來沒有在任何地方定義:

function shuffleWord(word) { 
    var array = word.split(''); 
    var m = array.length, t, i; 

    // While there remain elements to shuffle… 
    while (m) { 

    // Pick a remaining element... 
    i = Math.floor(Math.random() * m--); 

    // And swap it with the current element. 
    t = array[m]; 
    array[m] = array[i]; 
    array[i] = t; 
    } 

    return array.join(''); 
} 
+0

的currentWord定義,但這個功能不是內部,而是在它之外。對不起,我沒有說清楚。我在這裏定義「var m = letterArray.length,t,i;」而不是數組剛剛創建的文字方式? – user2316675 2013-04-24 20:13:21

+0

@ user2316675:定義了'i',但沒有給出任何值。你是什​​麼意思?*創建文字方式*?來自w3schools的 – Blender 2013-04-24 20:14:36

+0

:Literal:var myCars = [「Saab」,「Volvo」,「BMW」];但在上面的代碼中填充字符串currentWord – user2316675 2013-04-24 20:17:03

0

因爲您還沒有定義currentWordarray

疑難解答從瀏覽器的開發者控制檯開始。