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

Примеры

Давайте посмотрим на метод setScore, который работает с массивом scoreArray, который мы только что создали.





Метод setScore спрашивает пользователя ввести оценки, одну за другой, в соответствующие элементы массива.

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

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

Поэтому, поместив имя массива, в этом случае, scoreArray, перед .length, это даст нам размер массива scoreArray.

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

Цикл for внутри метода в первую очередь инициализирует счетчик-переменную i в 0.

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

Если пользователь введет 100 как оценку, IO.inputDouble возьмет введенное значение и присвоит его элементу массива с индексом 0, который является первым элементом.

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

Когда действие внутри тела цикла for завершится, счетчик i увеличится на 1.

Пользователь введет другую оценку, скажем 90, которая присвоится индексу 1 массива.

Далее процесс продолжится и i++ увеличит i до 2.

Следующее введенное значение, скажем 80, будет присвоено третьему элементу массива.

Выражение i++ затем увеличит i до 3 и последний элемент массива примет значение 70.

Когда условие цикла будет проверено снова, i++ даст значение 4, которое будет больше, чем размер массива, и цикл будет завершен.







Метод getScore будет возвращать значение элемента массива, который имеет индекс, указанный параметром метода.

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

Помним, что действительный диапазон индексов от 0 до размера массива минус 1.

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

Второе условие строго меньше, потому что максимальный индекс – это размер массива минус 1.

Если оба условия возвращают true, getScore возвратит значение, хранимое в индексе массива.

Например, если индекс 1, будет возвращен второй элемент scoreArray.

Если одно из условий возвращает false, условное выражение возвратит false и выражение else будет выполнено.

Сообщение об ошибке будет выведено на экран и будет возвращено значение -1.

Возвращаемое значение здесь ничего не означает, но что-то должно быть возвращено, потому что getScore метод определен как возвращающий значение типа double.

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







Следующий метод, который я собираюсь здесь обсудить – это aveScore, он вычисляет среднее всех значений, хранимых в массиве.

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

Я вернусь к этому позже.

Метод начинается с определения двух переменных.

Одна переменная типа double для хранения суммы всех значений массива и вторая для размера массива, который может быть определен из переменной экземпляра length.

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

Мы уже видели подобный цикл for в методе setScore, так что это общий подход для перебора элементов массива фиксированной длины.

И помним снова, что индекс начинается с 0 и он меньше чем размер массива.

Последнее выражение метода aveScore делит общую сумму на размер, что даст среднее всех оценок, и среднее затем будет возвращено как результат.

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







Этот метод maxIndex, который вместо нахождения максимального значения, находит позицию или индекс элемента массива, который дает максимальное значение.

Метод maxIndex имеет один параметр, это размер целого типа, и возвращает целое значение, которое дает индекс максимального элемента.

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

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

Я дам вам больше примеров использования этой опции позже.

Наш метод объявляет локальную переменную mIndex, для хранения позиции максимального элемента.

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

Если размер будет слишком большим, мы его сбросим до реального размера.

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

Заметьте, что текущий максимум получается с помощью переменной mIndex, потому что это позиция найденного максимума.

Если условие верно, новый максимум найден и переменную mIndex нужно обновить в текущий индекс.

Когда цикл for завершится, mIndex будет содержать позицию максимального элемента массива, и его значение будет возвращено как результат.

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

Назад: Демонстрация цикла
Дальше: Перестановка элементов