Книга: Основы программирования с Java
Назад: Вопросы
Дальше: Вопросы

Выражение

switch

Для исследования проблемы else, давайте взглянем на эти два блока кода.





Единственное различие между двумя блоками является идентификация принадлежности else.

И здесь могут быть два вопроса.

Первый, к какому выражению if выражение else принадлежит?

Второй вопрос, это то, каким будет значение после оценки if выражения?

Идентификация фактически не влияет на то, как компилятор будет интерпретировать блоки кодов.

В Java, else выражение соотносится с ближайшим возможным if выражением. В этом случае, это проверка значения b.







Таким образом, здесь блок кода слева такой же, как код блока справа, с парой вставленных фигурных скобок.

Результат оценки блока кода приведет к установке значения a = 30 в конце выполнения.

Мы можем также использовать комбинацию if-else if.







Пример здесь показывает, как эта комбинация может быть использована для определения вашего класса.

Обратите внимание, что будет иметь большое значение, если ключевое слово else остается перед if.







Сравните со случаем, когда else убрано.

В этом случае поток выполнения прерываться не будет.

Теперь, в то время как if выражение позволяет выбрать из двух возможных путей, switch выражение позволяет более двух путей выполнения.







Вот диаграмма для иллюстрации потока управления switch выражения.

И вот синтаксис switch выражения.







Синтаксис switch выражения начинается с ключевого слова switch.

Выражение switch может иметь тип char, byte, short или int.

Значения case value1, value2 и т.д., должны быть того же типа, что и выражение switch.

Ключевое слово break используется для выполнения switch выражения.

Важно помнить, что без break, поток будет продолжать двигаться к следующему case, пока break не будет найден.

И наконец, есть опция по умолчанию.

С ключевым словом default, эта часть кода будет выполняться только, когда никакие другие случаи не соответствуют.

Вот пример с использованием switch выражения.







Угадайте, что произойдет, если убрать все ключевые слова break?

Это будет то же самое, как если в примере if-else if убрать ключевое слово else.

На самом деле, все, что может быть сделано с помощью switch выражения, также может быть сделано с помощью if-else выражения.

Демонстрация примера

Ранее, мы рассматривали демо-программу для создания трехмерных изображений.

В дополнение к созданию 3D-изображений сцены вокруг нас с помощью видеокамер, вы также можете создать искусственно 3D-изображения из 2D-изображений.

Идея состоит в том, чтобы разместить 2 копии одного и того же изображения с небольшим горизонтальным смещением, которое часто называют стерео-диспропорцией.







Поскольку наши два глаза ориентированы более или менее вдоль горизонтальной оси, смещение должно быть ориентировано горизонтально и смещение не может быть слишком большим, в противном случае, наши глаза не смогут легко слить изображения.

Затем мы извлекаем красный канал из левого изображения и синий канал из правого изображения, и добавив их, вы сможете создать 3D изображение, которое всплывает над фоном.

Вот иллюстрация того процесса, который я только что описал.







Если два изображения ставятся рядом, после извлечения красного канала из левого изображения и синего канала из правого изображения, добавляя их, вы должны быть в состоянии видеть плавающее полученное изображение над фоном, используя красно-синие 3D-очки.

Это результирующее 3D-изображение.

Если вы используете красно-синие очки, как те, которые я уже обсуждал с вами, вы должны увидеть изображение, плавающее над фоном.

Используя различные стерео-диспропорции, вы можете увидеть 3D-изображения с разной глубиной.

Для того чтобы сделать это, вам на самом деле нужно манипулировать пикселями, используя циклы и массивы, которые будут обсуждаться позже.

А сейчас я хочу, чтобы вы завершили простой метод, который просто проверяет, что стерео-диспропорция, введенная пользователем, находится в пределах определенного диапазона, так что разница не слишком велика для полученного изображения, чтобы быть слитым нашими глазами, при этом мы будем использовать выражения ветвления, которые мы только что обсудили.







Это похоже на проверку диапазона баллов для программы CourseGrade, или проверку того, что у вас есть достаточный баланс банковского счета для снятия денег, или проверку на достаточность бензина в вашем автомобиле, чтобы выполнить требуемую поездку.

В частности, мы хотим определить диапазон между 0 и половиной ширины изображения.

То есть, если на входе меньше нуля, метод будет устанавливать значение стерео-диспропорции 0, и вы не увидите 3D-эффект.

Если на входе больше, чем половина ширины изображения, стерео-диспропорция устанавливается на половину ширины изображения.

После завершения написания метода, вы можете скомпилировать проект.

Затем можно создать экземпляр класса объекта класса BouncingBall.







Вы увидите мяч, который отображается на футбольное поле.

Из экземпляра вы можете выбрать метод анимации. Он попросит вас ввести значение стерео-диспропорции.











Давайте сначала попробуем 20, и вы увидите анимацию.

Если вы наденете красно-синие 3D-очки, вы должны увидеть, что футбольные мячи движутся к вам.

Давайте попробуем большую диспропорцию, скажем 200, которая больше, чем ширина изображения.

Программа, как предполагается, вернется к значению половины ширины изображения.

И вы сможете увидеть, что изображение движется выше, чем раньше.

Позже, вы должны быть в состоянии создавать анимацию как эту самостоятельно.

Назад: Вопросы
Дальше: Вопросы