Как заполнить массив с клавиатуры Java

Обновлено: 21.11.2024

Вот простая программа под названием ArrayDemo , которая создает массив, помещает в него некоторые значения и отображает значения.

Объявление переменной для ссылки на массив

Как и объявления переменных других типов, объявление массива состоит из двух компонентов: типа массива и имени массива. Тип массива записывается type[] , где type — это тип данных элементов, содержащихся в массиве, а [] указывает, что это массив. Помните, что все элементы в массиве относятся к одному типу. В примере программы используется int[] , поэтому массив с именем anArray будет использоваться для хранения целочисленных данных. Вот объявления для массивов, содержащих другие типы данных:

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

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

Создание массива

Вы создаете массив явным образом, используя новый оператор Java. Следующая инструкция в примере программы выделяет массив с объемом памяти, достаточным для десяти целочисленных элементов, и присваивает массив объявленной ранее переменной anArray.

Как правило, при создании массива вы используете новый оператор, плюс тип данных элементов массива, а также желаемое количество элементов, заключенное в квадратные скобки — [ и ].

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

Инициализаторы массивов

Доступ к элементу массива

Теперь, когда для массива выделена память, программа присваивает значения элементам массива:

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

Получение размера массива

Будьте осторожны: у программистов, плохо знакомых с языком программирования Java, возникает искушение указать длину с пустым набором скобок. Это не работает, потому что длина не является методом. длина — это свойство, предоставляемое платформой Java для всех массивов.

Нам нужно иметь возможность считывать каждое входное значение дважды: один раз, чтобы вычислить среднее значение (кумулятивную сумму), и еще раз, чтобы подсчитать, сколько из них было выше среднего. Мы могли бы прочитать каждое значение в переменную, но мы не знаем, сколько дней потребуется для запуска программы, поэтому мы не знаем, сколько переменных нужно объявить.

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

Задача: возможно ли решить вышеуказанную проблему, используя только методы из предыдущих заметок, без использования массивов? Как?

Массивы

массив — это объект, в котором хранится множество значений одного типа. Массив элемент — это одно значение в массиве. Массив index — это целое число, указывающее позицию в массиве. Как и String, массивы используют индексирование с отсчетом от нуля, то есть индексы массива начинаются с 0. Ниже показаны индексы и значения в массиве с 10 элементами типа < tt>целое.

индекс 0 1 2 3 4 5 6 7 8 9
value 12 49 -2 26 5 17 -6 84 72 3

Объявление и создание массива


Это просто объявляет переменную, которая может содержать массив, но не создает сам массив.
Например, чтобы объявить переменную numbers, которая может содержать массив целых чисел, мы должны использовать:


Поскольку массивы являются объектами, мы создаем массивы с помощью new.
При создании массива вы указываете количество элементов в массиве следующим образом:

индекс 0 1 2 3 4 5 6 7 8 9
value 0 0 0 0 0 0 0 0 0 0


Каждый элемент в массиве инициализируется нулем или любым значением, которое считается "эквивалентным" нулю для типа данных (false для boolean и null для String).

Сохранение значений и доступ к элементам

индекс 0 1 2 3 4 5 6 7 8 9
value 27 0 0 -6 0 0 0 0 0 0

При объявлении массива каждому элементу массива присваивается начальное значение по умолчанию.
Для целых чисел значение по умолчанию равно 0. Как вы думаете, какое значение по умолчанию используется для двойных чисел?

Упражнение: начальные значения массива по умолчанию
Напишите программу, которая объявляет массив double длины 4, печатает значения, присваивает значение каждому элементу и снова печатает значения.
Теперь сделайте то же самое для массива элементов String.

Массивы и циклы

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

Мы начинаем с 0, потому что индексы начинаются с 0. Мы заканчиваем сразу перед 10, потому что 10 — это длина нашего массива numbers, а последний индекс на единицу меньше длины массива.
[Массивы предоставляют много возможностей для ошибок один за другим из-за того, как работают индексы.]

Если бы мы изменили массив numbers, чтобы он содержал другое количество элементов, этот код больше не работал бы. К счастью, Java предоставляет простой способ получить длину массива, добавив .length после переменной массива, например:

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

Упражнение: Инициализировать и показать целочисленный массив
Напишите программу, которая вводит длину массива int от пользователя и присваивает 1 по индексу 0, присваивает 2 по индексу 1, присваивает 3 по индексу 2 и так далее. Один цикл должен присваивать значения каждому элементу массива. Второй цикл должен печатать значения массива с пробелами между значениями.

Упражнение: Инициализировать и показать двойной массив
Напишите программу, которая вводит длину массива двойных от пользователя и значение для инициализации массива. Один цикл должен присвоить значение каждому элементу массива. Второй цикл должен печатать значения массива с пробелами между значениями.

Температурная программа

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

  1. Введите количество дней от пользователя.
  2. Объявите и создайте массив int с числом дней в качестве длины.
  3. Для каждого индекса в массиве:
    1. Введите температуру от пользователя.
    2. Сохранить температуру в массиве по этому индексу.
      1. Добавьте значение этого индекса к сумме.
        1. Если значение этого индекса больше среднего:
          1. Увеличить значение счетчика.

          Мы могли бы объединить первые два цикла в один цикл, но чище делать их по отдельности.
          Вот программа, соответствующая псевдокоду.

          Упражнение: дисперсия и стандартное отклонение
          Измените программу температуры так, чтобы она также вычисляла дисперсию и стандартное отклонение температур.
          Чтобы вычислить дисперсию, необходимо суммировать:

          Дополнительные функции массива

          В Java есть множество других возможностей для программирования с массивами.Мы просто приводим здесь некоторые примеры и информацию. Дополнительную информацию см. в учебнике.

          Если вы заранее знаете, какие значения будут в массиве, вы можете указать эти значения при объявлении массива, например:

          Существует особый вид цикла (цикл for-each) для обработки каждого значения в массиве. Вот пример для программы «Температура». Конечно, лучше выбрать имя, чем foo.

          Класс Arrays предоставляет несколько удобных статических методов для работы с массивами. Для их использования необходимо добавить Arrays. перед названием метода (и импортировать пакет java.util).

          Имя метода Описание
          copyOf(array, newSize) возвращает копию массива с новым размером
          equals( array1, array2) возвращает true, если все элементы равны
          fill(массив, значение)< /td> присваивает каждому элементу массива значение
          sort(array) переставляет значения для перехода от наименьшего к наибольшему
          toString(array) возвращает String представление массив

          Задание: массив простых чисел
          Напишите программу для инициализации массива первыми 10 простыми числами: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29.
          Используйте цикл for-each для суммирования значений в массиве.
          Выведите массив с помощью метода Arrays.toString.

          Массивы и методы

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

          В данном случае имя параметра — vals, но, как и для всех переменных параметров, вы можете выбрать любое имя по своему усмотрению. Обратите внимание, что [ ] является частью типа параметра. double[ ] vals следует читать как "двойной массив с именем vals".

          Упражнение: Метод усреднения массива
          Напишите метод, который возвращает среднее значение в массиве int. Включите и используйте этот метод в программе Температура.

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

          Обратите внимание, что [ ] является частью типа возвращаемого значения, а токен является именем параметра String. Внутри метода нам нужно убедиться, что массив имеет ту же длину, что и String; код получает это значение с помощью метода length. Обратите внимание, что метод length используется дважды: один раз, чтобы указать длину нового массива, а другой — в проверке цикла.

          Упражнение: Создайте метод массива int
          Напишите метод, который возвращает новый массив int заданного размера и с инициализацией каждого элемента заданным значением. Обратите внимание, что этот метод требует два параметра. Включите и используйте этот метод в программе Температура.

          Ссылки

          Когда вы передаете массив в качестве параметра, Java не создает новую копию массива. Это было бы очень неэффективно для больших массивов. Вместо этого переменная параметра хранит ссылку (или указатель) на тот же массив. Это означает, что если метод изменяет массив, то эти изменения будут видны коду, вызывающему метод. Рассмотрим следующую программу.

          Вывод этой программы:


          Обратите внимание, что метод setToZero не изменяет value1 на ноль. Когда параметр является примитивным типом, значение копируется. Это иллюстрирует ситуацию до и после оператора value2 = 0;. Значения для value1 и value2 хранятся в двух разных местах.

          До
          После
          value1 3.14 value1 3.14
          value2 3.14 value2 0.0


          Однако метод set2Zero изменил элемент array1 на ноль. Когда параметр является массивом, копируется ссылка, а не массив. Это иллюстрирует ситуацию до и после оператора array2[index] = 0;. И массив1, и массив2 ссылаются на один и тот же массив.

          1. Сколько переменных целочисленного массива есть в этой программе?
          2. Сколько объектов целочисленного массива есть в этой программе?
          3. Что печатает эта программа?
          4. После вывода первой строки к скольким массивам может получить доступ эта программа?
          5. После того, как будет напечатана последняя строка, к скольким массивам может получить доступ эта программа?
          6. Допустим, мы добавим строку: в конце программы. Сколько массивов теперь может получить доступ к этой программе?
          1. Напишите метод doubleDoubleArray, который удваивает каждый элемент в массиве double.
            Этот метод должен иметь параметр массива и возвращаемый тип void.
            Напишите программу для проверки метода, печатающую массив до и после вызова метода.
          2. Напишите аналогичный метод doubleIntArray, который удваивает каждый элемент в массиве int.
          3. Можете ли вы написать единственный метод, который может принимать массив double или массив int в качестве параметра и удваивать элементы массива?

          Алгоритмы обхода массива

          Дополнительная тема: Чтение файла в массив

          Если вы выполняли некоторые действия, вы, вероятно, обнаружили, что вводить значения для массивов вручную утомительно. Программе было бы удобнее читать значения из файла. Дополнительную информацию об обработке файлов можно найти в главе 6 учебника.

          файл — это набор информации, который хранится на компьютере и которому присвоено имя. Например, hamlet.txt может быть именем файла, содержащего текст Hamlet. Hello.java может быть именем файла с вашей программой "Hello World". Мы будем работать с текстовыми файлами, включая файлы с расширением .txt, а также файлы .java и .html.

          1. Открыть файл для чтения (или записи).
          2. Чтение данных из файла (или запись данных в файл).
          3. Закройте файл.

          В Java мы будем использовать объекты File для представления файлов и объекты Scanner для открытия, чтения и закрытия файлов. Предположим, у нас есть файл temperature.txt, который содержит следующую информацию, необходимую программе Temperature.

          Предполагая, что этот файл находится в той же папке, что и программа Temperature, объект File может быть создан с помощью этого оператора.

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

          Мы можем использовать объект Scanner для файла так же, как объект Scanner для клавиатуры, за исключением того, что нам не нужно печатать подсказки. Вот программа Temperature, которая считывает информацию из файла.


          Обратите внимание, что необходим дополнительный оператор импорта; это потому, что класс File является частью пакета java.io. Также обратите внимание, что в заголовке метода необходимо предложение throws. Это связано с тем, что Java требует, чтобы вы обращали внимание на возможность FileNotFoundException. Было бы лучше использовать оператор try/catch для решения этой проблемы, но это выходит за рамки данного курса.

          • Измените файл, чтобы он содержал недопустимые данные. Что происходит?
          • Измените программу так, чтобы она считывала температуры из файла, пока есть допустимые записи для чтения, а затем отображала результаты.
            • Измените программу, чтобы она печатала температуры по мере их считывания.
            • Удалите первую строку (количество дней) из файла Temperature.txt.
            • Замените первый цикл for на:
              while(input.hasNextInt())
            • Создайте массив размером MAX_SIZE, константой, инициализированной до 100.
            • Сохраняйте подсчет количества прочитанных значений (переменная count уже занята).
              Используйте его как индекс для хранения элементов в массиве и для вычисления среднего значения. Не используйте temps.length
            • Распечатайте количество считанных значений температуры вместе со средней температурой.
            • Измените цикл while, чтобы не считывалось больше MAX_SIZE чисел.

            Задание: Поиск Гамлета
            Напишите программу, которая считывает 32230 токенов из hamlet.txt в массив String. Запросить у пользователя слово для поиска. Подсчитайте и распечатайте, сколько раз встречается это слово. Вы можете попробовать два слова: "haue" (более 100 раз) и "againe" (более 10 раз).

            Дополнительная тема: многомерные массивы

            Во многих приложениях данные имеют несколько измерений. Таблицы, изображения. и видео являются тремя распространенными примерами. Здесь мы будем использовать пример файла iris.txt. Если вы хотите узнать больше о том, что означают эти числа, вы можете прочитать это.

            Первая строка iris.txt указывает, что данные состоят из 150 строк (или строк) и 5 ​​столбцов. Многомерный массив может быть объявлен так, чтобы мы могли получить доступ к элементу по строке и столбцу. Предполагая, что эти числа хранятся в переменных с именами rows и columns, мы можем объявить двумерный массив следующим образом:

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

            Элемент в десятой строке и третьем столбце будет назначен и доступен:

            Для обоих параметров используется индексация с отсчетом от нуля. Конечно, было бы очень утомительно писать 750 строк кода для присвоения значения каждому элементу массива iris. Обычно используются вложенные циклы.

            1. Для каждого индекса строки:
              1. Для индекса каждого столбца:
                1. Что-то делать с элементом в этой строке и столбце

                Если объект Scanner для чтения из iris.txt хранится в переменной input, то следующий код заполнит массив (при условии, что первые два числа были потреблены).

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

                Когда у вас много данных, часто полезно посмотреть, как они выглядят. В качестве последнего примера рассмотрим, как подсчитать, сколько раз каждое значение встречается в файле iris.txt. При проверке каждое значение имеет не более одного десятичного знака, поэтому, если мы умножим на 10 и округлим, то разные значения будут соответствовать разным целым числам. Все значения в файле iris.txt положительные, а наибольшее значение равно 7,9, поэтому целые числа будут находиться в диапазоне от 1 до 79. Это означает, что для подсчета каждого значения можно использовать массив целых чисел длиной 80.

                Например, предположим, что значение равно 2,3. Умножение на 10 дает 23. Это означает, что мы должны добавить 1 к целочисленному массиву с индексом 23. Вот код, который подсчитывает все 750 значений.

                Что именно вы пытаетесь сделать? Если бы вы опубликовали часть своего кода, было бы легче увидеть, что вы пытаетесь сделать.

                Бармен

                Можем ли мы увидеть какой-либо код, который вы пробовали? Какой тип вы пытаетесь сохранить в массиве? Расскажите, пожалуйста, подробности.

                Чем тише вы ведете себя, тем больше слышите.

                Бармен

                Если вы публикуете код, который не компилируется, укажите это, а также предоставьте сообщения об ошибках компилятора.
                Он не скомпилируется, потому что вы не можете использовать переменную 'a' перед ее объявлением.

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

                Тони Дохерти писал: Если вы размещаете код, который не компилируется, укажите это, а также предоставьте сообщения об ошибках компилятора.
                Он не скомпилируется, потому что вы не можете использовать переменную 'a' перед ее объявлением.

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

                Бармен

                Бармен

                Бармен

                Вообще-то, зачем вы это делаете? Массив пуст, так почему вы помещаете значение с индексом i в переменную a.
                Вы можете избавиться от этой строки, и вам нужно добавить несколько фигурных скобок, чтобы ваш цикл for повторял больше, чем просто следующую строку.

                Я не могу понять, не могли бы вы исправить код, чтобы уловить идею .. я сделал цикл, и БОЛЬШАЯ идея, я хочу ввести числа в массив самостоятельно:\

                Тони Дохерти написал: Код, который вы разместили, недействителен для Java, он не компилируется.

                Бармен

                Бармен

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

                плюс, числа или элементы массива записываются нужным мне компьютером (с помощью клавиатуры);


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

                Бармен

                Я бы хотел, чтобы вы описали логику того, что вы пытаетесь сделать, на простом английском языке (или на любом другом языке общения, который вы предпочитаете).

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

                Abz Aka написал: плюс, числа или элементы массива записываются компьютером, который я хочу, мной (клавиатурой);

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

                Кроме того, ИМХО, принимать от пользователя 100 номеров — не лучшая идея. Как насчет того, чтобы убедиться, что ваш код работает для небольшого ввода (например, принимает 3 или 5 чисел от пользователя)?

                С уважением,
                Анайонкар Шивалкар (SCJP, SCWCD, OCMJD, OCEEJBD)

                Бармен

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

                Тони Дохерти написал: Ваш первый код был почти правильным, я предоставил два блока кода цикла for, чтобы вы могли увидеть разницу между фигурными скобками, поскольку вы, похоже, не поняли моих инструкций о том, что вам нужно сделать. к вашему коду. Они не были предназначены для того, чтобы вы копировали их в свой код, они были просто для того, чтобы показать, как добавление фигурных скобок изменило код, выполняемый внутри цикла.


                я не настолько глуп, чтобы копировать :\ ..просто я настаиваю на вводе данных через (((сканер))) и все мои попытки неверны ,,в гугле есть несколько решений но это продвинутый и новый для меня ..это все
                теперь Могу ли я сделать со сканером или мне нужно использовать ((arraylist,arrayread и все такое)))) для добавления элементов??

                Бармен

                Abz Aka написал: теперь я могу сделать со сканером или мне нужно использовать ((arraylist,arrayread и все такое)))) для добавления элементов??

                Ну, я бы посоветовал вам ознакомиться с документацией по Java для класса Scanner. Создать объект сканера — это одно, а заставить его принимать ввод от пользователя (клавиатуры) — совсем другое.

                Кроме того, убедитесь, что ваш алгоритм готов, чтобы избежать логических ошибок.

                С уважением,
                Анайонкар Шивалкар (SCJP, SCWCD, OCMJD, OCEEJBD)

                Бармен

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

                Бармен

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

                Сначала попробуйте это, забудьте о пользовательском вводе. Если вы не можете этого сделать, вам следует вернуться к основам Java и пройтись по ним еще раз. Очевидно, вы потеряли некоторые понятия, поскольку указания, которые дал вам Тони, очень подробны и прямолинейны. А теперь попробуем маленькими шагами.

                Чем тише вы ведете себя, тем больше слышите.

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

                Бармен

                Abz Aka написал: просто я настаиваю на вводе данных с помощью (((сканера))) и все мои попытки неверны, в Google есть некоторые решения, но они продвинуты и новы для меня. .вот и все
                сейчас Могу ли я сделать это со сканером или мне нужно использовать ((arraylist,arrayread и подобные вещи)))) для добавления элементов??

                Похоже, вы говорите: "Я хочу заполнить массив с помощью сканера".

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

                Вы должны подумать о двух совершенно независимых шагах (которые могут в конечном итоге быть разбиты на еще более мелкие шаги по мере продвижения).

                <р>1. Получить пользовательский ввод.

                <р>2. Заполнить массив.

                Вы можете работать над одним из них, не задумываясь о другом.

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

                Напишите отдельную маленькую программу, которая ничего не делает, кроме чтения со сканера. Пусть он прочитает 3 значения в 3 переменные. Без зацикливания. Никаких массивов. Просто прочитайте с помощью сканера и распечатайте результаты. Даже не думайте о массивах.

                Далее добавьте циклы в обе программы.

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

                В этом разделе мы рассмотрим фундаментальную конструкцию, известную как массив. Массив хранит последовательность значений одного типа. Мы хотим не только хранить значения, но и иметь возможность быстрого доступа к каждому отдельному значению. Метод, который мы используем для обращения к отдельным значениям в массиве, состоит в том, чтобы пронумеровать, а затем индексировать их. Если у нас есть n значений, мы думаем, что они пронумерованы от 0 до n−1.

                Массивы в Java.

                • Объявите имя массива.
                • Создайте массив.
                • Инициализировать значения массива.

                Типичный код обработки массива.

                ArrayExamples.java содержит типичные примеры использования массивов в Java.

                Программирование с массивами.

                • Индексирование с отсчетом от нуля. Мы всегда ссылаемся на первый элемент массива a[] как a[0], на второй как a[1] и так далее. Вам может показаться более естественным обращаться к первому элементу как к a[1], ко второму значению как a[2] и т. д., но запуск индексации с 0 имеет некоторые преимущества и является соглашением, используемым в большинстве современных языков программирования.
                • Длина массива. Когда мы создаем массив, его длина фиксируется. Вы можете ссылаться на длину a[] в своей программе с помощью кода a.length.
                • Инициализация массива по умолчанию. Для экономии кода мы часто пользуемся соглашением Java об инициализации массива по умолчанию. Например, следующий оператор эквивалентен четырем строкам кода в верхней части этой страницы:

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

                Перетасовка и выборка.

                • Обмен. Часто нам нужно обменять два значения в массиве. Продолжая наш пример с игральными картами, следующий код меняет местами карту в позиции i и карту в позиции j:

                Предварительно вычисленные значения.

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

                а затем просто используйте код harmonic[i] для ссылки на любое из значений. Предварительное вычисление значений таким образом в примере компромисса между пространством и временем: инвестируя в пространство (для сохранения значений), мы экономим время (поскольку нам не нужно их пересчитывать). Этот метод неэффективен, если нам нужны значения для огромного n, но очень эффективен, если нам нужно огромное количество значений для малого n.

                Упрощение повторяющегося кода.

                В качестве примера другого простого применения массивов рассмотрим следующий фрагмент кода, который печатает название месяца по его номеру (1 – январь, 2 – февраль и т. д.):

                Мы также могли бы использовать оператор switch, но гораздо более компактной альтернативой является использование массива строк, состоящего из названий каждого месяца:

                Этот метод был бы особенно полезен, если бы вам нужно было получить доступ к названию месяца по его номеру в нескольких разных местах вашей программы. Обратите внимание, что мы намеренно теряем один слот в массиве (элемент 0), чтобы MONTHS[1] соответствовали январю, как это требуется.

                Сборщик купонов.

                Предположим, что у вас есть перетасованная колода карт, и вы переворачиваете их лицевой стороной вверх одну за другой. Сколько карт вам нужно открыть, прежде чем вы увидите по одной каждой масти? Это пример известной задачи сборщика купонов. В общем, предположим, что компания, выпускающая коллекционные карточки, выпускает коллекционные карточки с n различными возможными карточками: сколько вам нужно собрать, прежде чем вы получите все n возможностей, предполагая, что каждая возможность равновероятно для каждой карты, которую вы собираете? CouponCollector.java принимает целочисленный аргумент командной строки n и моделирует этот процесс. Подробнее см. в учебнике.

                Решето Эратосфена.

                Функция подсчета простых чисел π(n) – это количество простых чисел, меньших или равных n. Например, π(17) = 7, так как первые семь простых чисел равны 2, 3, 5, 7, 11, 13 и 17. PrimeSieve.java принимает целочисленный аргумент командной строки n и вычисляет π (n) с помощью Решета Эратосфена. Подробности смотрите в учебнике.

                Двумерные массивы.

                Мы называем такой массив массивом размером m на n. По соглашению первое измерение — это количество строк, а второе — количество столбцов.

                Читайте также: