Реализация поиска с помощью инструкций “continue” и “break”

Спонсор поста: Бесплатно дать объявление о купле или продаже автомобиля.

Инструкция continue прерывает текущую итерацию цикла и возобновляет выполнение цикла с очередной итерации. Например:

var total = 0;
var i = 0;
while (++i <= 10) {
  if (i == 5) {
    continue;
  }
  total += i;
}

В данном скрипте оператор цикла while выполняет 10 итераций. На каждой итерации к переменной total добавляется значение i – кроме пятой итерации, когда i равно 5. В этом случае вызывается действие continue, выполнение дальнейших действий в теле цикла прекращается, и происходит переход к одиннадцатой итерации. В итоге переменная total будет содержать набор чисел: "1 2 3 4 6 7 8 9 10". Обратите внимание, что в этом наборе отсутствует число 5 – ведь пятая итерация цикла была прервана.

Инструкция break аналогична continue, но используется для досрочного прекращения цикла – даже если условие цикла все еще true. Рассмотрим пример:

var total = 0;
var i = 0;
while (++i <= 10) {
  total += i;
  if (total >= 5) {
    break;
  }
}    

В этом скрипте с каждой итерацией total увеличивается на i. Как только значение total достигнет 5 (с помощью оператора if мы это проверяем), выполняется действие break и цикл while завершается, хотя он должен был бы выполняться 10 раз.

Предлагаю закрепить полученные знания на примере создания простой процедуры поиска.

Итак, задача: создать приложение, реализующее поиск по массиву с телефонными номерами и именами владельцев. Т.е. вводим имя (в поле name), жмем кнопку, получаем (в поле result) номер человека, имя которого введено.

1. Создаем новый документ, в первом кадре пишем следующий код:

info=[["Alex","+7-909-202-77-55"], ["Marta","+7-950-040-33-11"],
["Semen","+7-910-111-22-01"]];

Таким образом мы создаем двумерный массив info. Он содержит три элемента, каждый из которых также является массивом. Первый элемент - имя человека, второй - его телефонный номер.
Для обращения к первому имени массива Alex мы напишем такой код: info[0][0], для обращение к его телефонному номеру – info[0][1].

2. Добавляем описание функции:

function search() {
  matchFound = false;
  i = -1;
  while (++i < info.length) {
  }
}

С помощью этой функции будет выполняться поиск в массиве info нужного телефонного номера. Циклом while перебираем все элементы массива info.

3. Внутрь цикла while (в функции search()) вставьте следующий код:

if (info[i][0].toLowerCase() != name.text.toLowerCase()) {
  continue;
}
result.text = info[i][1];
matchFound = true;
break;

На каждой итерации оператор if обращается к очередному элементу массива info и сравнивает имя из этого массива с тем, что введено пользователем в поле name. Переводим оба значения методом toLowerCase() в нижний регистр, чтобы поиск не был зависимым от строчных и прописных букв.

Действие continue выполняется при условии, что значения не равны. Последующие действия цикла пропускаются.

Если текст из поля name соответствует имени из массива info, continue не вызывается, и выполняются три действия, стоящие после оператора if: переменной result.text присваивается значение телефонного номера, matchFound --> true, выполняется действие break, которое прекращает выполнение цикла.

Если все понятно, двигаемся дальше. Кстати, может возникнуть вопрос "а нафига нам тут следует применять break?". Хороший вопрос. А теперь представьте, что ваш массив состоит из тысячи значений, а вы запросили первое из них. Будет break - вам тут же выведется то, что искали, не будет break - компьютер переберет все значения, прежде чем выведет верное. Так что ответ: "для экономии времени".

4. В функцию search() добавляем еще один оператор if после цикла:

if (matchFound == false) {
  result.text="Не найдено :( ";
}

Выводим сообщение об ошибке, если искомых абонентов не нашлось.

5. Последний штрих. Готовим кнопку для поиска. Для этого создадим новый movie clip, присвоим ему имя search_btn и добавим следующий код:

search_btn.onRelease = function(){
  search();
}

Исходник >>

This entry was posted in Кодинг and tagged , , , , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.
сделано dimoning.ru