2014-01-13 149 views
0

我試圖運行JavaScript以下while循環:的javascript while循環沒有結束

function returnSubstring(i, theString) { 
    var j = 1; 
    while (i > 1) { 
     if (theString.charCodeAt(j) == ',') { 
      i--; 
     } 
     else { 
      <% System.out.println("nope, not a comma"); %> 
     } 
     j++; 
    } 
    var value = theString; 
    var subString = value.substring(j, value.indexOf(",", j+1)); 
    alert(subString);  
} 

,我只是傳遞一個指數string

returnSubstring(someIndex, someString); 

它總是崩潰。我想我至少在while循環中獲得一輪。 (我得到1 'nope') 我在這裏做錯了什麼?

當索引爲0或1時,它也可以工作。但其他號碼,否

+0

瞭解如何使用瀏覽器的調試工具。 –

+0

那麼,當字符串不包含逗號時會發生什麼?另外,你有錯誤還是無限循環? – Aioros

+0

您不會在else語句中遞減'i'。 – Johnny5

回答

1

你應該總是減少i,否則你永遠不會結束你的循環,J會超出範圍。另外...你應該var j = 0,否則你會跳過第一個字符。

例如:"Text",並i == 2

你開始在:
"T",沒有逗號,移動j前進,i仍然2.
"e",沒有逗號,前進ji仍然2.
"x",無逗號,移動j轉發,i仍然2.
"t",無逗號,移動j前進,i仍然2.
""(empty string),沒有逗號,j現在是出界,移動j前進,i仍然2.
^這最後一步被永遠重複。

相反,你的代碼更改爲:

function returnSubstring(i, theString) { 
    i = i > theString.length() ? theString.length() : i; // don't go too far. 
    var j = 0; // Start at 0 
    while (i >= 1) { // `i > 1` is stopping the code 1 character earlier 
     if (theString.charCodeAt(j) != ',') { // this `if` is not required 
      console.log("nope, not a comma"); // No JAVA code, please 
     } 
     i--; 
     j++; 
    } 
    var value = theString; 
    var subString = value.substring(j, value.indexOf(",", j+1)); 
    // alert(subString); // not necessary 
    return subString; // return the value 
} 
+0

我喜歡它。謝謝回答 :) – wjhplano

0

如果i的字符不是逗號,則不會減少i。我建議讓i被遞減不管是在循環中使用一個for循環:for (; i > 1; i--)

1

你應該遞減

你確定你可以這樣做:

<% System.out.println("nope, not a comma"); %> 

爲什麼你不使用:

document.write() 
0

我建議你的循環迭代通過輸入st環,像這樣:

for(var i = 0; i < theString.length; i++) { ... } 

這將防止一些邏輯錯誤,將導致無限循環。