2015-06-22 37 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