Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.06.2016, 03:29
Новичок на форуме
Отправить личное сообщение для amanai Посмотреть профиль Найти все сообщения от amanai
 
Регистрация: 08.06.2016
Сообщений: 4

Начал изучать 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 ?
Ответить с цитированием
  #2 (permalink)  
Старый 08.06.2016, 04:03
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

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, 08.06.2016 в 04:16.
Ответить с цитированием
  #3 (permalink)  
Старый 09.06.2016, 00:09
Новичок на форуме
Отправить личное сообщение для amanai Посмотреть профиль Найти все сообщения от amanai
 
Регистрация: 08.06.2016
Сообщений: 4

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

Сообщение от Bond Посмотреть сообщение
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 прибавлять
		}
Ответить с цитированием
  #4 (permalink)  
Старый 09.06.2016, 02:41
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

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 и т.д)
Ответить с цитированием
  #5 (permalink)  
Старый 09.06.2016, 04:11
Новичок на форуме
Отправить личное сообщение для amanai Посмотреть профиль Найти все сообщения от amanai
 
Регистрация: 08.06.2016
Сообщений: 4

Понял, спасибо большое!! Вы случаем не преподаете?
Сообщение от Bond Посмотреть сообщение
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 и т.д)
Ответить с цитированием
  #6 (permalink)  
Старый 09.06.2016, 05:43
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

amanai,
Цитата:
Понял, спасибо большое!! Вы случаем не преподаете?
На здоровье ))
Нет не преподаю, я сам учусь, только на другом уровне ) Как говорят век живи век учись.
Ответить с цитированием
  #7 (permalink)  
Старый 09.06.2016, 20:19
Новичок на форуме
Отправить личное сообщение для amanai Посмотреть профиль Найти все сообщения от amanai
 
Регистрация: 08.06.2016
Сообщений: 4

Понял Вас) Это уж точно)
Ответить с цитированием
  #8 (permalink)  
Старый 10.06.2016, 14:09
Аватар для pureJS
Аспирант
Отправить личное сообщение для pureJS Посмотреть профиль Найти все сообщения от pureJS
 
Регистрация: 04.06.2016
Сообщений: 70

amanai,
Сообщение от amanai Посмотреть сообщение
Начал изучать 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
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу разобраться с url в $.ajax ShoN jQuery 3 16.12.2010 10:55
Функция проверки onDomReady. Не могу разобраться с кодом vandy3 Общие вопросы Javascript 6 08.11.2010 09:47
One Click Upload не могу разобраться a.graphics jQuery 0 06.09.2010 13:16
не могу разобраться с массивом ! jenyokCoder Общие вопросы Javascript 2 29.03.2010 00:46
Не могу разобраться с туториалом mr.codec jQuery 0 23.03.2009 21:27