В данном видео уроке подробно рассматриваются одномерные и двумерные массивы, а так же процесс их создания. Массивы являются важной составляющей любого языка программирования. Они предоставляют возможность программисту эффективно хранить набор однотипных переменных и, затем, работать с ним, как с единым целым.
В начале урока рассматриваются одномерные массивы. С ними приходится работать особенно часто. Подробно объясняются этапы создания массива: объявление, определение и инициализация. К каждому этапу приводятся примеры. Подробно рассматриваются вопросы, касающиеся длины массива: может ли быть поставлен в соответствие переменной новый массив другой длины, каким образом можно получить длину массива и другие. При обращении к массиву могут возникать сложности с определением индекса необходимого элемента, поэтому данная проблема так же рассматривается в этом уроке.
Многомерные массивы представляют особую сложность при их использовании. Из-за того, что размерность, превышающая два, применяется довольно редко, в данном уроке подробно рассматривается только один частный случай многомерных массивов – двумерные массивы. В Java многомерные массивы нужно воспринимать как массивы массивов. Например, элементами двумерного массива являются так же массивы, которые, в свою очередь, могут состоять из различного числа элементов, т.е. иметь различную длину. Внимательно просмотрев урок, вы обязательно поймете принцип «массива массивов» и научитесь применять его на практике.
В практической части урока объясняется решение задачи, в которой будут продемонстрированы приемы работы с двумерным массивом, рассмотренные в течение всего урока. При решении задачи, кроме цикла for, будет использован цикл foreach (усовершенствованный цикл for), позволяющий легко проходить по всем элементам массива.
Для закрепления материала предлагаются тестовые и практические задания, выполнение которых многократно повысит эффективность занятий, а так же позволит вам оценить свои успехи в изучении массивов.
Процесс создания массива можно разделить на следующие этапы:
объявление, сортировка, обращение
объявление, сортировка, уничтожение
объявление, определение, инициализация
объявление, распределение, уничтожение
Этапы создания массива, которые можно объединить в одну инструкцию:
объявление, уничтожение
объявление, инициализация
распределение, обращение
никакие этапы объединять нельзя
Многомерные и двумерные массивы:
равнозначные понятия
многомерные массивы – частный случай двумерных массивов
двумерные массивы – частный случай многомерных массивов
абсолютно разные понятия
При выходе значения индекса массива за установленные границы:
выдается неожиданный результат, программа продолжает работу
выполняется форматирование системного логического диска, программа продолжает работу
выдается сообщение об ошибке, программа продолжает работу
выдается сообщение об ошибке, работа программы прерывается
Многомерные массивы представляют собой:
простые списки однотипных переменных
массивы, элементами которых являются другие массивы
примитивные типы данных
беспорядочные совокупности элементов различных типов, доступ к которым осуществляется по принципу стека
При определении многомерного массива необходимо указать длину:
только первого измерения
только второго измерения
только первого и последнего измерения
всех измерений
Многомерные массивы могут инициализироваться при помощи вложенных последовательностей исходных значений
да
нет
Найдите ошибку и исправьте ее
int[] ar = {1, 4, 5, 8}; int i = 0; System.out.print(ar[i] + " "); while(i < ar.length) { i++; System.out.print(ar[i] + " "); }
Ситуация
Программист утверждает, что при выводе массива на консоль, строка, состоящая из знаков плюс, разделит фигуру на две равные части. Прав ли он?
char[][] ar = new char[5][8]; for(int i = 0; i < ar.length; i++) { for(int j = 0; j < ar[i].length; j++) { if(i != 3) ar[i][j] = '*'; else ar[i][j] = '+'; } }
Задача
Создайте двумерный массив типа double. Найдите сумму значений его элементов и среднее арифметическое. При изменении длины массива программа должна работать корректно без дополнительных исправлений.
В теле цикла while переменная i примет значение 4 и, после этого, произойдет попытка обращения к элементу массива ar с этим индексом. Так как индекс последнего элемента массива ar равен трем, то будет выдано сообщение об ошибке.
Следующий код будет корректен:
int[] ar = {1, 4, 5, 8}; int i = 0; while(i < ar.length) { System.out.print(ar[i] + " "); i++; }
Ситуация
Программист не прав. Фигура состоит из пяти строк, следовательно, для того, чтобы строка со знаками плюс разделила фигуру на две части, необходимо поместить ее на место третьей строки, которая имеет индекс два.
char[][] ar = new char[5][8]; for(int i = 0; i < ar.length; i++) { for(int j = 0; j < ar[i].length; j++) { if(i != 2) ar[i][j] = '*'; else ar[i][j] = '+'; } }
//объявляем и определяем двумерный массив double[][] doubleAr = new double[3][5]; //для хранения суммы double sum = 0; //для подсчета количества элементов int count = 0; //инициализируем массив for(int i = 0; i < doubleAr.length; i++) { for(int j = 0; j < doubleAr[i].length; j++) { doubleAr[i][j] = Math.random()*100; } } /* * находим сумму и количество элементов в массиве * выводим элементы массива на консоль */ for(double[] dAr: doubleAr) { for(double d: dAr) { sum += d; count++; System.out.print(d + " "); } System.out.println(); }
System.out.println("\nВсего чисел: " + count + "\nСумма всех чисел: " + sum + "\nСреднее арифметическое: " + sum/count); }
Здесь два усовершенствованных цикла for (foreach) используются для прохода по всем элементам массива doubleAr. Переменная dAr во внешнем цикле будет по очереди принимать ссылки(массив - ссылочный тип данных) на один из трех массивов, которые являются элементами двумерного массива doubleAr. Во внутреннем цикле переменная d последовательно принимает значение каждого элемента одномерного массива dAr. Таким образом, в примере решения переменная d будет принимать значения, по очереди, от элемента doubleAr[0][0] до элемента doubleAr[2][4].
Следующий фрагмент кода будет выполнять те же функции, что и фрагмент, в котором используются циклы foreach:
for(int i = 0; i < doubleAr.length; i++) { for(int j = 0; j < doubleAr[i].length; j++) { sum += doubleAr[i][j]; count++; System.out.print(doubleAr[i][j] + " "); } System.out.println(); }
у меня почему то пишет ошибку на foreach statements are only available if source level is 1.5
Ответ отadmin Дело в том, что конструкция for-each введена в язык Java, начиная с версии Java SE 5. Вам наобходимо обновить JDK или JRE до данной версии. Если с версией Java у Вас все в порядке, то попробуйте посмотреть здесь: http://dev.eclipse.org/newslists/news.eclipse.newcomer/msg14781.html