2015-06-22 81 views
0

我目前在Code Academy上玩得很開心學習。他們推出了推。並且在沒有大量初始信息的情況下很快嵌套循環。我想我有點理解其中的邏輯,並想看看是否有人能幫助打破它......請幫我理解這個'for循環'中的邏輯

var text = "Here is a string with the name rick sometimes not always rick and sometimes rick"; 
//assigning text string to variable text 

var myName = "rick"; 
//assigning rick to variable myName 
var hits = []; 
// assinging an empty array to variable hits 
for (var i = 0; i < text.length; i++); { 
    //for loop i = 0, and as long as i = less than the length of entire text string keep incrementing 1 
    if (text[i] === "r") { 
     //while looping through text when you find an "r" enter second for loop 
     for(var j = i; j < (i+ myName.length); j++){ 
      //J takes the value of i at this point and it should be 0 and should increment 4 steps as myName = 4 characters 

      hits.push(text[j]); 
      //this push statement should add each letter of my name to the hits array 
     } 
    } 
} 

這時我的代碼不能正常工作。我在第一個for循環中放置了一個console.log,它只是打印出84. 「console.log(」I =「+ I)」 我明白這很漂亮n00b,但我真的想遵循邏輯,理解什麼是發生。我關門了嗎?

+2

很難讀取沒有縮進的代碼。如果您可以輕鬆閱讀,更多的人會關注您的問題。 – jfriend00

+1

「// J在這一點上取我的值,它應該是0」這個評論是不正確的。 'j'將等於'i',它可能小於'text.length'。對於第一次發現的文本,它會發現'r''i'將等於2,因爲它會在「Here」中看到'r'。 – DigitalNinja

+1

那麼究竟是你期望的結果?什麼是問題?在第一眼看來,內循環對我來說毫無意義。 – dreamlab

回答

0

你真的很近。

你只是有一個問題:

  • 的 「;」之後。它只是到了「for」循環結束時什麼都不做。

把它拿出來,它會工作!

你可能喜歡的另一件事是添加到列表中「點擊」所有跟在'r'字符後的單詞。

你應該這樣做:

if (text[i] === "r") { 
    var word = ""; 
    for(var j = i; j < (i+ myName.length); j++) { 
     word+=text[j]; 
    } 
    hits.push(word); 
} 

同時,應注意的是1 + myName.length仍處於text.length的限制(即I + myName.length < text.length)

希望它有幫助!

0

您的代碼非常接近。你不小心把一個分號後,您的第一個for循環:

for (var i = 0; i < text.length; i++); 

這基本上使得1號線塊,與此相同:

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

採取分號出來,它應該做你想要的:) 。儘管如果你的意圖只是推動了rick,那麼你需要檢查的不僅僅是「r」,你需要驗證之後的每個字符也等於rick。

0

你有一個「;」在那之後不應該在那裏。另外,你仍然受限於你的字符串的長度。所以,你的說法就變成了:

for(var j = i; j < (i + myName.length) && i < text.length; j++){ 

舉例來說,如果你有一個字符串,它是長82個字符,你找到了一個「R」在文本的結尾(I = 81),你原來的循環會將j設置爲81,然後嘗試檢查字符串中索引爲82,83,84和85的字符,這些字符不存在並會導致錯誤。添加i < text.length的添加檢查可確保您不會嘗試檢查不存在的項目。

我不知道你的課程有多遠。以防萬一,'& &'是一個AND,所以j必須小於(i + myName.length),也小於text.length。

這裏是它的工作(http://jsfiddle.net/onlinespaces/xj39974c/1/

使用的jsfiddle一個的jsfiddle是這樣的事情一個很好的工具。

祝你好運!

+0

哇,我真誠地感謝所有的迴應,並解決第一個問題,我非常討厭JS,所以我的格式化有些挑戰。您輸入的內容已被確認@ jfriend00。 – r1ckn0rr15

+0

我已經改變了一些腳本CodeAcademy允許我通過課程,但我仍然不滿意。我想發佈我的編輯腳本,但不確定這樣做的禮儀。我是否發佈了一個完整的新問題,或者我可以添加到這個問題? – r1ckn0rr15