2011-11-16 87 views
1

會發生什麼事是,如果用戶點擊'獲取會話ID'按鈕。它顯示一個隨機字符串,它將代表sessionId。這工作正常。我的問題是,目前我有5個字符串,分別是「AAA」,「AAB」,「AAC」,「AAD」和「AAE」。現在我想讓這些字符串一路走到「ZZZ」。有沒有更快的方法來寫這個字符串

從「AAA」到「ZZZ」寫出所有的字符串需要花費我一段時間和大量的編碼。我想知道的是,有什麼方法可以顯示「AAA」和「ZZZ」之間的所有字符串,而無需手動輸入所有字符串?

下面是我的代碼:

<head> 
     <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
     <title>Create a Session</title> 
     <script type="text/javascript"> 

var randomStrings = [ 
     "AAA", 
     "AAB", 
     "AAC", 
     "AAD", 
     "AAE", 
    ]; 

    function getSession() { 

var randomDiv = document.getElementById("randomStrings"); 

      randomIndex = Math.round(Math.random()*(randomStrings.length-1)); 
      newText = randomStrings[randomIndex]; 
      randomDiv.innerHTML = newText; 
} 

</head> 

<body> 
<form action="create_session.php" method="post" name="sessionform"> 
<table> 
      <tr> 
      <th>1: </th> 
      <td><input id="sessionBtn" type="button" value="Get Session ID" name="sessionid" onClick="getSession()" /></td> <!-- Get Session ID here--> 
      <td id="randomStrings"></td> 
      </tr> 
      </table> 
</form> 
</body> 
+0

我要感謝所有的你們企圖回答我的問題。我必須與Jonathon Newmuis的答案一致,因爲這已經非常出色。謝謝Jonathon。Ur a Genius :) – BruceyBandit

回答

2

對於你在做什麼在這裏,這將是方式比需要更昂貴的生成所有可能的字符串,然後選擇一個隨機。如果你這樣做,你將不得不生成17,576(26^3)個字符串,只需要一個隨機的三個字母的字符串。您可以改爲只生成一個隨機字符串,而不是一次生成一個字符。

var alphabet = [ "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" ]; 

function generateRandomString(strLength) { 
    var output = ""; 
    for (var i = 0; i < strLength; i++) { 
     var randomIndex = Math.floor(Math.random() * alphabet.length); 
     output += alphabet[randomIndex]; 
    } 
    return output; 
} 

function getSession() { 
    var randomDiv = document.getElementById("randomStrings"); 
    newText = generateRandomString(3); 
    randomDiv.innerHTML = newText; 
} 

該解決方案還可以更好地擴展。要生成所有可能的字符串並選擇一個,運行時將爲O(26^n),其中n是字符串中的字符數。此解決方案的運行時(逐個字符構建字符串)爲O(n),其中n是字符串中的字符數。

這意味着如果您決定需要更多的會話ID(如果更多用戶使用您的應用程序),您可以輕鬆完成。如果您事先要構建所有可能性,5個字符的會話ID將需要11,881,376次迭代。這需要5次迭代才能建立一種可能性。

1

此功能的工作原理:

function getStrings(){ 
    var strings = []; 
    var start = 65; 
    var end = 91; 
    for (var a = start; a < end; a++) { 
      for (var b = start; b < end; b++) { 
        for (var c = start; c < end; c++) { 
          strings.push(String.fromCharCode(a)+String.fromCharCode(b)+String.fromCharCode(c)); 
        } 
      } 
    } 
    return strings; 
} 

但喬納森Newmuis答案要好得多。

0

試試這個

http://jsfiddle.net/snJeX/

var strings = []; 
for (var a = 0x41; a < 0x5b; a++) { 
    for (var b = 0x41; b < 0x5b; b++) { 
     for (var c = 0x41; c < 0x5b; c++) { 
      strings.push(
       String.fromCharCode(a) + 
       String.fromCharCode(b) + 
       String.fromCharCode(c)); 
     } 
    } 
} 
-2

也許使用這樣的功能,並調用了三次:

string GetCharacter(int index) 
{ 
    switch(index) 
    { 
    case 1: return "A"; 
    case 2: return "B"; 
    ... 
    ... 
    case 27: return "Z" 
    } 
} 
4
function randLetter() 
{ 
    return String.fromCharCode(65 + Math.round(Math.random()*25)); 
} 

... 

var newText = randLetter() + randLetter() + randLetter(); 

只需使用一個這樣的功能。

http://jsfiddle.net/kgjcE/

+0

你,先生,是我的新單行英雄=) – sod

1

所有可能的組合,不要存放在數組中。

只需生成你想要的字符串。

function gen_str(len) { 
    var str = ''; 
    while(len--) 
     str += String.fromCharCode(~~(Math.random() * 26) + 65); 
    return str; 
} 

var rand_str = gen_str(3); // "AHY" 
+1

+1使用~~ – RobG

0

這裏有一個輕微的增強/簡化喬納森的功能:

var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

function generateRandomString(strLength) { 
    var output = ""; 
    for (var i = 0; i < strLength; i++) { 
     var randomIndex = Math.floor(Math.random() * alphabet.length); 
     output += alphabet.charAt(randomIndex); 
    } 
    return output; 
} 

function getSession() { 
    var randomDiv = document.getElementById("randomStrings"); 
    newText = generateRandomString(3); 
    randomDiv.innerHTML = newText; 
} 
相關問題