Начал изучать 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, время: 21:39. |