Блок Примитивные типы
Скачать 6.67 Mb.
|
Почему бы не использовать рекурсиюОбычно это происходит медленнее из-за накладных расходов на обслуживание стека. Обычно он использует больше памяти для стека. Зачем использовать рекурсиюРекурсия добавляет ясности и (иногда) сокращает время, необходимое для написания и отладки кода (но не обязательно снижает требования к пространству или скорость выполнения). Снижает трудоемкость. Лучше справляется с решением задач на основе древовидных структур. Условные операторы и циклы Условные операторы — конструкции, которые, проверяя условия, запускают в действие необходимый код. В зависимости от того, является ли условие истинным (true) или ложным (false), выполняется определенный фрагмент кода. В Java, как в других языках программирования, применяют специальные операторы: if используют для указания фрагмента кода, который должен выполняться, если условие истинно; if-else дает возможность выбрать между двумя способами действий; switch применяют при выборе между несколькими решениями, когда вариантов — много, и прописывать для каждого if-else будет долго. Существует сокращенный вариант if-else, его еще называют тернарный оператор, так как он состоит из трех операндов (данных, которые обрабатываются командой): условие со знаком вопроса (?); условие, которое выполнится, если утверждение истинно — за ним следует двоеточие (:); условие, которые выполнится, если утверждение ложно. Этот способ используют, чтобы заменить несколько строк кода одной. Логика следующая: условие ? выражение «истинное» : выражение «ложное». Пример с if-else можно представить одной строкой: System.out.println (x>y ? "x больше y": "y больше x "); Цикл for действует следующим образом. При первом запуске цикла программа выполняет инициализационную часть цикла. В общем случае это выражение, устанавливающее значение управляющей переменной цикла, которая действует в качестве счетчика, управляющего циклом. Важно понимать, что выражение инициализации выполняется только один раз. Затем программа вычисляет условие, которое должно быть булевским выражением. Как правило, выражение условия сравнивает значение управляющей переменной с целевым значением. Если это значение истинно, программа выполняет тело цикла. Если оно ложно, выполнение цикла прерывается. Затем программа выполняет тело цикла и только после этого выполняется часть повторение цикла. Повторение это обычно выражение, которое увеличивает или уменьшает значение управляющей переменной. Затем программа повторяет цикл, при каждом прохождении вначале вычисляя условное выражение, затем выполняя тело цикла и выполняя выражение повторения. Процесс повторяется до тех пор, пока значение выражения условия не станет ложным. Поскольку большинство циклов применяют свои переменные только внутри цикла, цикл for допускает, чтобы выражение инициализации было полным объявлением переменной. Таким образом, переменная ограничена телом цикла и невидима извне. Цикл в стиле foreach предназначен для строго последовательного выполнения повторяющихся действий по отношению к коллекциям объектов, например, таких как массивы. В Java возможность применения цикла foreach реализована за счет усовершенствования цикла for. Общая форма версии foreach цикла for имеет следующий вид: for (тип итерационная переменная : коллекция) блок-операторов Тип это тип переменной, итерационная переменная — имя итерационной переменной, которая последовательно будет принимать значения из коллекции, от первого до последнего. Элемент коллекция указывает коллекцию, по которой должен выполняться цикл. С циклом for можно применять различные типы коллекций, но пока мы будем использовать только массивы, кстати которые тоже пока не проходили, но по крайней мере уже было много примеров с приветствиями из массива строк, куда попадают аргументы командной строки. На заметку: оператор foreach применим к массивам и классам, реализующим интерфейс java.lang.Iterable. На каждой итерации цикла программа извлекает следующий элемент коллекции и сохраняет его в итерационной переменной. Цикл выполняется до тех пор, пока не будут получены все элементы коллекции. Хотя повторение цикла for в стиле foreach выполняется до тех пор, пока не будут обработаны все элементы массива (коллекции), цикл можно прервать и раньше, используя оператор break. Поскольку итерационная переменная получает значения из коллекции, ее тип должен совпадать (или быть совместимым) с типом элементов, хранящихся в коллекции. Таким образом, при выполнении цикла по массивам тип должен быть совместим с базовым типом массива. Чтобы понять побудительные причины применения циклов в стиле foreach, рассмотрим тип цикла for, для замены которого предназначен этот стиль. Также существует цикл while (цикл с предусловием). Работает следующим образом: вычисляет булевое выражение, заключенное в скобки после слова while, и если оно истинно, то выполняется тело цикла. В Java есть еще одна разновидность цикла while — цикл do-while. Он очень похож на while и тоже состоит всего из двух частей: «условие» и «тело цикла». Тело цикла выполняется снова и снова, пока условие равно true. Но если в цикле while последовательность выполнения будет такой: условие, тело цикла, условие, тело цикла, условие, тело цикла, ... То в do-while она будет немного другой: тело цикла, условие, тело цикла, условие, тело цикла, ... Фактически разница между while и do while только в том, что тело цикла в цикле do-while выполнятся как минимум один раз. Массивы Массив — это структура данных, в которой хранятся элементы одного типа. Его можно представить, как набор пронумерованных ячеек, в каждую из которых можно поместить какие-то данные (один элемент данных в одну ячейку). Доступ к конкретной ячейке осуществляется через её номер. Номер элемента в массиве также называют индексом. При создании массива в теле объекта создается int переменная, хранящая количество его элементов. Так как переменная инт, то максимальное ее значение = Integer.MAX_VALUE - 1. Либо количество элементов массива ограничено памятью компьютера. Максимальная размерность массива - 255. Блок 3. Объекты, классы и пакеты в Java Что такое ООП? Объектно-ориентированное программирование (ООП) — парадигма программирования, сменившая процедурное программирование (последовательное, алгоритмичное), в которой основными концепциями являются понятия объектов и классов. Класс - это как бы каркас объекта, описывающий его поведение, возможности, поля. А объект - это конкретный экземпляр класса, имеющий определенное состояние и поведение. Данные объекта скрыты от остальной программы, сокрытие данных называется инкапсуляцией. Но основные преимущества ООП проявляются только в том случае, когда в языке программирования реализован полиморфизм — то есть возможность объектов с одинаковой спецификацией иметь различную реализацию. Представьте себе, что вы проектируете автомобиль. Вы знаете, что автомобиль должен содержать двигатель, подвеску, две передних фары, 4 колеса, и т.д. Ещё вы знаете, что ваш автомобиль должен иметь возможность набирать и сбавлять скорость, совершать поворот и двигаться задним ходом. И, что самое главное, вы точно знаете, как взаимодействует двигатель и колёса, согласно каким законам движется распредвал и коленвал, а также как устроены дифференциалы. Вы уверены в своих знаниях и начинаете проектирование. Вы описываете все запчасти, из которых состоит ваш автомобиль, а также то, каким образом эти запчасти взаимодействуют между собой. Кроме того, вы описываете, что должен сделать пользователь, чтобы машина затормозила, или включился дальний свет фар. Результатом вашей работы будет некоторый эскиз. Вы только что разработали то, что в ООП называется класс. |