Как заполнить двумерный массив с клавиатуры Java
Обновлено: 21.11.2024
Цикл Nest for часто используется для обработки двумерного массива.
Предположим, что матрица массива сделана следующим образом:
Ниже приведены некоторые примеры обработки двумерных массивов:
1. Инициализация значений массивов пользовательским вводом.
Следующий цикл инициализирует массив введенными пользователем значениями:
2. Инициализация массивов случайными значениями.
Следующий цикл инициализирует массив случайными значениями от 0 до 99:
3. Печать массивов.
Чтобы напечатать двумерный массив, вы должны напечатать каждый элемент массива, используя цикл, подобный следующему:
4. Суммирование всех элементов.
Используйте переменную с именем total для хранения суммы. Изначально общее количество равно 0 . Добавьте каждый элемент массива к сумме, используя цикл, подобный этому:
5. Суммирование элементов по столбцу.
Для каждого столбца используйте переменную с именем total для хранения суммы. Добавьте каждый элемент в столбце к сумме, используя цикл, подобный этому:
*Обратите внимание, что в примерах 4. и 5. (этот)
столбец и строка меняются местами сверху и снизу.6. В какой строке самая большая сумма?
Используйте переменные maxRow и indexOfMaxRow для отслеживания наибольшей суммы и индекса строки. Для каждой строки вычислите ее сумму и обновите maxRow и indexOfMaxRow, если новая сумма больше.
7. Случайное перемешивание.
Перемешивание элементов в одномерном массиве было введено в ___ . Как перетасовать все элементы двумерного массива? Для этого для каждого элемента matrix[i][j] случайным образом сгенерируйте индексы i1 и j1 и поменяйте местами matrix[i][j] с matrix[i1][j1] следующим образом:
При передаче двумерного массива в метод ссылка на массив передается в метод.
Двумерный массив можно передать в метод точно так же, как и одномерный массив. Вы также можете вернуть массив из метода. В приведенном ниже примере показаны 2 метода. Первый метод getArray() возвращает двумерный массив, а второй метод sum(int[][] m) возвращает сумму всех элементов матрицы.
В этом разделе мы рассмотрим фундаментальную конструкцию, известную как массив. Массив хранит последовательность значений одного типа. Мы хотим не только хранить значения, но и иметь возможность быстрого доступа к каждому отдельному значению. Метод, который мы используем для обращения к отдельным значениям в массиве, состоит в том, чтобы пронумеровать, а затем индексировать их. Если у нас есть 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. По соглашению первое измерение — это количество строк, а второе — количество столбцов.
Многомерный массив в Java представляет собой 2D, 3D, . . . . массивы, представляющие собой комбинацию нескольких типов массивов.
Например, двумерный массив представляет собой комбинацию двух или более одномерных (1D) массивов.
Аналогичным образом трехмерный массив представляет собой комбинацию двух или более двумерных (2D) массивов.
Давайте сначала подробно разберемся с концепциями двумерных массивов в Java. В следующем уроке мы сосредоточимся на трехмерных массивах.
Двумерный массив (двумерный массив) в Java
Двумерный массив в Java представляет множество строк и столбцов данных. Данные в виде матрицы или таблицы могут быть представлены с помощью двумерного массива.
Матрица — это группа элементов, расположенных во множестве строк и столбцов. Мы можем использовать двумерный массив для хранения элементов матрицы или таблицы.
Например, оценки, полученные группой из трех учащихся по пяти различным предметам, можно представить в виде таблицы следующим образом:
Студенты | Физика | Химия | Математика | Компьютер | < th>Английский|
---|---|---|---|---|---|
Глубокий | 80 | 97 | 80< /td> | 99 | 82 |
Амит | 99 | 98 | 100 | 81 | 97 |
Ларри | 87 | 99 | 93 | 95 | 97 |
Мы можем хранить оценки трех учеников в приведенной выше таблице, используя двумерный массив, как:
Приведенные выше оценки, полученные тремя учащимися по пяти предметам, представляют собой двумерный массив (2D-массив), поскольку он представляет собой комбинацию 3 строк (число учащихся) и 5 столбцов (число предметов).
Мы можем рассматривать каждую строку как одномерный массив. Этот двумерный массив (2D-массив) содержит три одномерных массива. Итак, в java это называется многомерными массивами.
Как объявить и инициализировать двумерный массив в Java
Существует два основных способа создания двумерного массива в Java:
<р>1. Синтаксис для создания двумерного массива и непосредственного сохранения элементов во время его объявления выглядит следующим образом:Здесь int представляет типы элементов, хранящихся в массиве. В этом массиве мы сохранили элементы целочисленного типа. «знаки» представляют имя массива.
Две пары квадратных скобок ([ ] [ ]) после имени массива представляют собой двумерный массив. Элементы каждой строки должны быть заключены в фигурные скобки < и >.
Строки и элементы в каждой строке должны быть разделены запятыми.Поскольку в каждой строке три строки и пять столбцов, JVM создает 3 * 5 = 15 блоков памяти, так как в массиве хранится 15 элементов. Эти блоки памяти могут называться по отдельности как:
Как вы можете заметить, строки начинаются с 0 до 2, а столбцы — с 0 до 4. Таким образом, в общем виде любой элемент можно обозначить как метки[i][j], где i и j — два индексы, которые представляют положение строки и положение столбца соответственно.
Посмотрите на рисунок ниже, где показано расположение элементов в 2D-массиве.
Ключевой момент:
<р>1. В двумерном массиве доступ к элементу осуществляется через индекс строки и столбца. <р>2. Второй способ создания двумерного массива — сначала объявить массив, а затем выделить для него память с помощью оператора new.Синтаксис для объявления двумерного массива 3 на 5 типа int выглядит следующим образом:
Предшествующие два оператора можно записать, объединив их в один оператор, как:
Здесь JVM выделяет память для хранения 15 целочисленных значений в массиве. Но до сих пор мы не сохранили 15 значений в массиве.
Мы можем хранить элементы в двумерном массиве, принимая их с клавиатуры, а также из программы. Посмотрите на несколько типов примеров для 2D-массивов в java на рисунке ниже:
Давайте рассмотрим еще несколько примеров двумерных массивов в Java:
Способы объявления 2D-массива в Java
При объявлении двумерного массива мы можем написать две пары квадратных скобок до или после имени массива, например:
Получение длин двумерного массива
Двумерный массив — это одномерный массив, в котором каждый элемент представляет собой другой одномерный массив. Длина массива меток — это количество элементов в массиве, которое можно получить с помощью маркировки.длина.
метки[0], метки[1], метки[2], . . . . метки[метки.длина — 1] — это массивы. Их длины можно получить с помощью отметок[0].length, отметок[1].length, . . . . .marks[marks.length – 1].
Например, предположим, что метки = new int[3][4], метки[0], метки1] и метки[2] — это одномерные массивы, каждый из которых содержит четыре элемента. метки.length равно 3, а метки[0].длина, метки[1].длина и метки[2].длина равны 4.
Неровный массив в Java
Поскольку каждая строка в двумерном массиве сама по себе является массивом, строки могут иметь разную длину или размер. Двумерный массив с разными строками в Java называется зубчатым массивом.
Неровный массив также называется рваным массивом в java. Ниже приведен пример создания зубчатого массива:
Как видно из предыдущего кода, arr[0].length равно 5, arr[1].length равно 4, arr[2].length равно 3, arr[3].length равно 2 и arr [4].длина равна 1.
Мы можем создать зубчатый массив, используя следующий синтаксис.
Теперь мы можем инициализировать значения в зубчатом массиве следующим образом:
Первый индекс должен быть указан в синтаксисе new int[5][ ] для создания массива. Синтаксис new int[ ][ ] был бы неверным.
Примеры Java-программ для двумерных массивов
<р>1. Создадим программу, в которой будем создавать двумерный массив и отображать его элементы в матричном виде. Для отображения элементов двумерного массива мы будем использовать вложенный цикл for. Внешний цикл for представляет строки, а внутренний — столбцы каждого цикла.Исходный код программы 1:
В двумерном массиве мы использовали два цикла for для отображения элементов. Точно так же элементы трехмерного массива можно отобразить с помощью трех циклов for.
<р>2. Давайте создадим программу, в которой мы будем вычислять сумму всех элементов по столбцам и сумму всех элементов в 2D-массиве.Исходный код программы 2:
<р>3. Давайте возьмем пример программы, в которой мы посчитаем общие оценки, полученные тремя учениками по трем предметам, и отобразим их процентное соотношение.Исходный код программы 3:
<р>4. Поскольку многомерный массив в java на самом деле является массивом массивов, следовательно, длина каждого массива находится под нашим контролем. Нам не нужно выделять одинаковое количество элементов для каждого измерения.Возьмем пример программы, в которой мы создадим двумерный массив, в котором размеры второго измерения не равны.
То есть мы будем выделять вручную разные размеры для второго измерения. Этот тип массива называется рваным массивом в java.
Исходный код программы 4:
Как найти транспонирование матрицы в многомерном массиве Java?
<р>5.Напишем программу для нахождения транспонирования заданной матрицы. Транспонирование матрицы – это матрица, полученная путем преобразования строк в столбцы и столбцов в строки.Предположим, у нас есть матрица с 3 строками и 4 столбцами. Его матрица транспонирования будет иметь 4 строки и 3 столбца. В этой программе мы возьмем исходную матрицу из 3 строк и 3 столбцов.
Исходный код программы 5:
<р>6. Давайте создадим программу, в которой мы узнаем транспонирование данной матрицы. В этой программе мы будем принимать целочисленные значения в качестве ввода с клавиатуры с помощью класса Java Scanner.Вы также можете использовать класс InputStreamReader для приема ввода с клавиатуры и класс BufferedReader. Посмотрите исходный код ниже.
Исходный код программы 6:
В этой программе используется оператор sc.nextInt() для приема введенных значений int с клавиатуры. Метод nextInt() используется для приема следующего целочисленного значения от сканера.
Во вложенных циклах один за другим элементы принимаются методом sc.nextInt() и инициализируются массивом arr[i][j].
Надеюсь, что это руководство охватило почти все важные моменты, связанные с многомерными массивами в Java, с примером программы. Я надеюсь, что вы поняли двумерный массив (2D-массив) в java с несколькими типами примеров программ.
В следующем уроке мы изучим трехмерный массив в Java с примерами программ.
Спасибо за чтение.
Далее ⇒ Трехмерный массив в Java ⇐ Пред. След. ⇒
Массивы с двумя измерениями (т. е. индексами) часто представляют собой таблицы значений, состоящие из информации, расположенной в строках и столбцах.
Ниже приведены ключевые особенности многомерных массивов.
Чтобы идентифицировать конкретный элемент таблицы, мы должны указать два индекса.
По соглашению, первая идентифицирует строку элемента, а вторая идентифицирует столбец элемента.
Массивы, для идентификации определенного элемента которых требуются два нижних индекса, называются двумерными массивами или двумерными массивами.
Массивы с двумя или более измерениями называются многомерными массивами и могут иметь более двух измерений.
На следующем рисунке показан двумерный массив a. Массив содержит три строки и четыре столбца, поэтому это массив 3 на 4. Обычно массив с m строками и n столбцами называется массивом m на n.
Каждый элемент в массиве a идентифицируется именем элемента в форме a[i][j]. Здесь a — имя массива, а i и j — нижние индексы, которые однозначно идентифицируют каждый элемент массива a. Обратите внимание, что все имена элементов в строке 0 имеют первый нижний индекс 0; все имена элементов в столбце 3 имеют второй нижний индекс 3.
Многомерный массив может быть инициализирован в его объявлении так же, как и одномерный массив. Например, двумерный массив b со значениями 1 и 2 в элементах строки 0 и значениями 3 и 4 в элементах строки 1 можно объявить и инициализировать следующим образом:
Значения сгруппированы по строкам в фигурных скобках. Следовательно, 1 и 2 инициализируют b[0][0] и b[0][1] соответственно, а 3 и 4 инициализируют b[1][0] и b[1][1] соответственно. Если для данной строки недостаточно инициализаторов, остальные элементы этой строки инициализируются 0. Таким образом, следующее объявление инициализирует b[0][0] значением 1, b[0][1] значением 0, b[ от 1][0] до 3 и от b[1][1] до 4.
Пример
Вот пример, демонстрирующий инициализацию двумерных массивов в объявлениях.
Строки a–c объявляют три массива, каждый из которых состоит из двух строк и трех столбцов.
Объявление массива1 (строка а) предоставляет шесть инициализаторов в двух подсписках. Первый подсписок инициализирует строку 0 массива значениями 1, 2 и 3; второй подсписок инициализирует строку 1 массива значениями 4, 5 и 6.
Если скобки вокруг каждого вложенного списка удалены из списка инициализатора array1, компилятор инициализирует элементы строки 0, за которыми следуют элементы строки 1, что дает тот же результат.
Объявление array2 (строка b) предоставляет только пять инициализаторов.
Инициализаторы назначаются строке 0, затем строке 1. Любые элементы, не имеющие явного инициализатора, инициализируются нулем, поэтому array2[1][2] инициализируется нулем.
Объявление array3 (строка c) предоставляет три инициализатора в двух подсписках.
Подсписок для строки 0 явно инициализирует первые два элемента строки 0 значениями 1 и 2; третий элемент неявно инициализируется нулем.
Подсписок для строки 1 явно инициализирует первый элемент значением 4 и неявно инициализирует два последних элемента значением нуля.
Программа вызывает функцию printArray для вывода элементов каждого массива.Обратите внимание, что в прототипе функции (строка k) указан параметр const int a[][columns].
Когда функция получает в качестве аргумента одномерный массив, квадратные скобки массива в списке параметров функции пусты.
Размер первого измерения двумерного массива (т. е. количество строк) также не требуется, но требуются размеры всех последующих измерений. Компилятор использует эти размеры для определения расположения в памяти элементов многомерных массивов.
Все элементы массива хранятся в памяти последовательно, независимо от количества измерений. В двумерном массиве в памяти хранится строка 0, за которой следует строка 1.
Пример
Результат
Примечание. Каждая строка представляет собой одномерный массив. Чтобы найти элемент в определенной строке, функция должна точно знать, сколько элементов находится в каждой строке, чтобы она могла пропустить нужное количество ячеек памяти при доступе к массиву. Таким образом, при доступе к [1][2] функция знает, что нужно пропустить три элемента строки 0 в памяти, чтобы перейти к строке 1. Затем функция обращается к элементу 2 этой строки. Во многих распространенных операциях с массивами используются операторы FOR.
Например, следующий оператор FOR устанавливает все элементы в строке 2 массива a.
Инструкция FOR изменяет только второй нижний индекс (т. е. нижний индекс столбца). Предыдущий оператор FOR эквивалентен следующим операторам присваивания —
Следующий вложенный оператор FOR определяет сумму всех элементов в массиве a -
Инструкция FOR суммирует элементы массива по одной строке за раз. Внешний оператор FOR начинается с установки строки (т. е. нижнего индекса строки) в 0. Следовательно, элементы строки 0 могут быть суммированы внутренним оператором FOR.
Затем внешний оператор FOR увеличивает строку до 1, чтобы можно было суммировать элементы строки 1. Затем внешний оператор FOR увеличивает строку до 2, чтобы можно было суммировать элементы строки 2. Когда вложенный оператор FOR завершается, итог содержит сумму всех элементов массива.
Читайте также: