Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Начал изучать java, не могу разобраться в коде. (https://javascript.ru/forum/misc/63447-nachal-izuchat-java-ne-mogu-razobratsya-v-kode.html)

amanai 08.06.2016 03:29

Начал изучать 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 ?

Bond 08.06.2016 04:03

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 прибавлять
		}

amanai 09.06.2016 00:09

а откуда взялось число 30?

Цитата:

Сообщение от Bond (Сообщение 418773)
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 прибавлять
		}


Bond 09.06.2016 02:41

amanai,
Цитата:

а откуда взялось число 30?
С итерации первого цикла
Первый цикл перебирает переменную 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 09.06.2016 04:11

Понял, спасибо большое!! Вы случаем не преподаете?
Цитата:

Сообщение от Bond (Сообщение 418840)
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 и т.д)


Bond 09.06.2016 05:43

amanai,
Цитата:

Понял, спасибо большое!! Вы случаем не преподаете?
На здоровье ))
Нет не преподаю, я сам учусь, только на другом уровне ) Как говорят век живи век учись.

amanai 09.06.2016 20:19

Понял Вас) Это уж точно)

pureJS 10.06.2016 14:09

amanai,
Цитата:

Сообщение от amanai (Сообщение 418772)
Начал изучать java, не могу разобраться в коде.
Всем привет. Только начать изучать JS

Javascript (JS) - это НЕ Java! В чём отличие Java от javascript:
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, время: 15:27.