Начал изучать java, не могу разобраться в коде.
Всем привет. Только начать изучать JS на codeacademy вот такой код:
text = "Blah blah blah blah blah blah Eric \ blah blah blah Eric blah blah Eric blah blah \ blah blah blah blah blah Eric"; var myName = "Eric"; var hits = []; // Look for "E" in the text for(var i = 0; i < text.length; i++) { if (text[i] === "E") { // If we find it, add characters up to // the length of my name to the array for(var j = i; j < (myName.length + i); j++) { hits.push(text[j]); } } } if (hits.length === 0) { console.log("Your name wasn't found!"); } else { console.log(hits); } вопрос - почему в for(var j = i; j < (myName.length + i); j++) надо добавлять i к myName.length ? |
amanai,
Потому что переменная j начинается не с нуля а со значение переменной i. Задача вложенного цикла сделать количество итераций равное количеству букв в переменной myName. К примеру первая итерация вложенного цикла будет на 30-й итерации цикла родителя то есть переменная i = 30(или 29, не важно). Из этого получается что переменная j тоже будет равна 30 соответственно это условие j < (myName.length + i) мы не сможем записать не добавив к нему переменную i потому что цикл по сути будет выглядеть так for(var j = 30; j < 3; j++) {} и он никогда не выполнится потому что j всегда будет больше 3. (За исключением случае когда "E" в переменной text будет в первых трех позициях, но все равно работа кода не будет корректной) А если убрать +i тогда нам надо внутренний цикл записать так for(var j = 0; j < myName.length; j++) { //Здесь пишем var j = 0 hits.push(text[i+j]); // Все равно здесь надо значение i прибавлять } |
а откуда взялось число 30?
Цитата:
|
amanai,
Цитата:
Первый цикл перебирает переменную text по одному символу. и с каждой итерацией увеличивает свою переменную i на единицу. В этом цикле есть условие - если встретишь символ Е запусти второй цикл. Вот и получается что когда он встречает E и запускает вложенный цикл - переменная i равна 30 (можете сами посчитать количество символов в переменной text до первой E - счет ведется с нуля и включает также пробелы). Потом переменной j присваивается i=30 а условие (myName.length + i); звучит так - выполняй цикл пока j не станет больше 33 (потому что myName.length равно 3 + i = 30(на данный момент)); И не важно сколько будет равна i - хоть 100 хоть 200 - вложенный цикл будет делать 4 итерации (если i = 100 то цикл будет выполняться от 100 до 103, если 200 то от 200 до 203 и т.д) |
Понял, спасибо большое!! Вы случаем не преподаете?
Цитата:
|
amanai,
Цитата:
Нет не преподаю, я сам учусь, только на другом уровне ) Как говорят век живи век учись. |
Понял Вас) Это уж точно)
|
amanai,
Цитата:
http://www.java.com/ru/download/faq/java_javascript.xml http://www.codenet.ru/webmast/java/stat/jjs.php https://yandex.ru/search/?text=от...т+Javascript |
Часовой пояс GMT +3, время: 20:51. |