Массив в Java - это набор элементов одного типа, обратиться к которым можно по индексу.
Элементы массивов в Java расположены друг за другом в памяти компьютера. Ниже разбирается пример массива в Java.
Объявим массив, для хранения элементов типа int:
Здесь объявлена переменная arr, которая является массивом. Чтоб использовать эту переменную нужно её определить.
Для определения массива в Java следует указать его длину, т.е. количество элементов, которые могут в нём храниться:
В нашем массиве бедет храниться 5 элементов.
Массив - это набор элементов. К каждому элементу массива можно обратиться по его номеру. Номер принято называть индексом. Нумерация элементов массива в Java идёт с нуля.
Присвоим значение первому элементу массива, а первый элемент имеет индекс ноль:
Присвоим значение второму элементу массива, а второй элемент имеет индекс один:
for(int inn = 0; inn < 5; inn++)
{
arr = inn;
}
Можно при объявлении массива сразу загрузить в него значения:
int arr = {0, 1, 2, 3, 4};
количество элементов здесь равно 5-ти, т.е. нет необходимости указать число элементов, оно будет определено автоматически.
К каждому элементу массива можно обратиться по его номеру. Чтоб получить элемент массива, надо указать имя массива и индекс элемента:
это первый элемент массива, ведь у первого элемета индекс ноль.
Присвоим значение третьего элемента массива переменной int a:
Выведем в цикле все элементы массива (переберем массив):
For(int inn = 0; inn < 5; inn++) { System.out.println("arr[" + inn + "] = " + arr); }
Упрощенный вариант цикла для вывода массива таков:
For(int inn: arr) { System.out.println("arr[" + inn + "] = " + arr); }
Удалить массив в Java можно так:
Длину массива в Java получаем так:
int arrLength = arr.length;
int firstElem = arr;
int lastElem = arr;
Как в Java задать массив переменной длины? Никак. Когда вы определяете массив, тогда и задаёте его длину, изменить её в дальнейшем нельзя. В таких случаях используют коллекции, например: Vector, ArrayList и др.
Итак, перемнной длина массива быть не может. Но можно использовать переменную при определении массива. Если так:
int cd;
int ab = new int;//Error.
то получим ошибку, длина массива не может быть переменной.
Надо задать значение cd:
int cd = 10;
int ab = new int;
Теперь нормально. Если после определения массива изменить переменную cd, то это не повлияет на массив, т.е. его длина не изменится. Пример:
Int cd = 10; int ab = new int; cd = 12;// Это можно arrLength = ab.length; System.out.println("ab array length = " + arrLength); //Выводит: ab array length = 10 ab=4;// А вот здесь ошибка
Получим ошибку:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11
Максимальный индекс нашего массива равен 9-ти. Изменение значения переменной cd не влияет на массив, ведь он уже определен и его длина есть константа.
Переменные можно использовать для обращения к элементам массива:
Int var = 1;
int elem = arr;
var = 2;
elem = arr;
Пример массива символов в Java и его вывода:
Char charArr = {"S", "B", "P"}; for(int inn = 0; inn < charArr.length; inn++) { System.out.println("charArr[" + inn + "] = " + charArr); }
Заполнить массив можно с помощью статического метода fill.
Массивы (arrays) _ это упорядоченные наборы элементов одного типа. Элементами массива могут служить объекты простых и ссылочных типов, в том Числе и ссылки на другие массивы. Массивы сами по себе являются объектами и
наследуют класс Object. Объявление
int ia = new int;
Определяет массив с именем ia, который изначально указывает на набор из трех Элементов типа int.
В объявлении массива его размерность не указывается. Количество элементов массива задается при его создании посредством оператора new. Длина массива фиксируется в момент создания и в дальнейшем изменению не поддается. Впрочем, переменной типа массива (в нашем примере – ia) в любой момент может быть поставлен в соответствие новый массив с другой размерностью.
Доступ к элементам массива осуществляется по значениям их номеров-индексов.
Первый элемент массива имеет индекс, равный нулю (0), а последний – length – 1. Обращение к элементу массива выполняется посредством задания имени массива и значения индекса, заключенного в квадратные скобки, [ и ]. в предыдущем примере первым элементом массива ia будет ia, а последним – ia. При каждом обращении к элементу массива по индексу исполняющая система Java проверяет, находится ли значение индекса в допустимых пределах, и генерирует исключение типа ArraylndexOutOfBoundsException, если результат проверки ложен. 6 Выражение индекса должно относиться к типу int – только этим и ограничивается максимальное количество элементов массива.
Длину массива легко определить с помощью поля length объекта массива (которое неявно снабжено признаками publiс и final). Ниже приведен дополненный код прежнего примера, в котором предусмотрено выполнение Цикла, обеспечивающего вывод на экран содержимого каждого элемента массива ia:
for (int i = о; i < ia.length; i++)
system.out.println(i + ": " + ia[i]);
Массив нулевой длины (т.е. такой, в котором нет элементов) принято называть пустым. Обратите внимание, что ссылка на массив, равная значению null, и ссылка на пустой массив – это совершенно разные вещи. Пустой массив это реальный массив, в котором попросту отсутствуют элементы. Пустой массив представляет собой удобную альтернативу значению null при возврате из метода. Если метод способен возвращать null, прикладной код, в котором выполняется обращение к методу, должен сравнить возвращенное значение с null прежде, чем перейти к выполнению оставшихся операций. Если же метод возвращает массив (возможно, пустой), никакие дополнительные проверки не нужны – разумеется, помимо тех, которые касаются длины массива и должны выполняться в любом случае.
Допускается и иная форма объявления массива, в которой квадратные скобки задаются после идентификатора массива, а не после наименования его типа:
int ia = new int;
Прежний синтаксис, однако, считается более предпочтительным, поскольку описание типа в таком случае выглядит более компактным.
Модификаторы в объявлениях массивов
Правила употребления в объявлениях массивов тех или иных модификаторов обычны и зависят только от того, к какой категории относится массив – к полям или Локальным переменным. Существует единственная особенность, которую важно помнить, – модификаторы применяются к массиву как таковому, но не к его отдельным элементам. Если в объявлении массива указан признак final, это значит только то, что ссылка на массив не может быть изменена после его создания, но никак не запрещает возможность изменения содержимого отдельных элементов массива. Язык не позволяет задавать каких бы то ни было модификаторов (скажем, final или уоlatilе) для элементов массива.
Многомерные массивы
В Java поддерживается возможность объявления многомерных массивов (multidimensional arrays) (т.е. массивов, элементами которых служат другие массивы), Код, предусматривающий объявление двумерной матрицы и вывод на экран содержимого ее элементов, может выглядеть, например, так:
float mat = new float;
setupMatrix(mat);
for (int у = о; у < mat.length; у++) {
for (int х = о; х < mat[y].length; х++)
system.out.print(mat[y][x] + " ");
system.out.println();
При создании массива должна быть указана, по меньшей мере, его первая, "самая левая", размерность. Другие размерности разрешается не задавать – в этом случае их придется определить позже. Указание в операторе new единовременно всех размерностей – это самый лаконичный способ создания массива, позволяющий избежать необходимости использования дополнительных операторов new. Выражение объявления и создания массива mat, приведенное выше, равнозначно следующему фрагменту кода:
float mat = new float;
for (int у = о; у < mat.length; у++)
mat[y] = new float;
Такая форма объявления обладает тем преимуществом, что позволяет наряду с получением массивов с одинаковыми размерностями (скажем, 4 х 4) строить и массивы массивов различных размерностей, необходимых для хранения тех или иных последовательностей данных.
Инициализация массивов
При создании массива каждый его элемент получает значение, предусмотренное по умолчанию и зависящее от типа массива: нуль (0) – для числовых типов, ‘\u0000′ _ для char, false – для boolean и null – для ссылочных типов. Объявляя массив ссылочного типа, мы на самом деле определяем массив переменных этого типа. Рассмотрим следующий фрагмент кода:
Attr attrs = new Attr;
for (int i = о; i < attrs.length; i++)
attrs[i] = new Attr(names[i], values[i]);
После выполнения первого выражения, содержащего оператор new, переменная attrs получит ссылку на массив из 12 переменных, которые инициализированы значением null, Объекты Attr как таковые будут созданы только в процессе про хождения цикла.
Массив может инициализироваться (одновременно с объявлением) посредством конструкции в фигурных скобках, в которой перечислены исходные Значения его элементов:
String dangers = { "Львы", "Тигры", "Медведи" };
Следующий фрагмент кода даст тот же результат:
String dangers = new String; dangers = "Львы";
dangers = "Тигры";
dangers = "Медведи";
Первая форма, предусматривающая задание списка инициализаторов в фигурных скобках, не требует явного использования оператора new – он вызывается косвенно исполняющей системой. Длина массива в этом случае определяется Количеством значений-инициализаторов. Допускается и возможность явного задания оператора new, но размерность все равно следует опускать она, как и раньше, определяется исполняющей системой:
String dangers = new String { "Львы", "Тигры", "Медведи" };
Подобную форму объявления и инициализации массива разрешается применять в любом месте кода, например в выражении вызова метода:
printStringsCnew String { "раз", "два", "три" });
Массив без названия, который создается таким образом, называют анонимным (anonymous).
Массивы массивов могут инициализироваться посредством вложенных последовательностей исходных значений. Ниже приведен пример объявления массива, содержащего несколько первых строк так называемого треугольника Паскаля, где каждая строка описана собственным массивом значений.
int pascalsTriangle = {
{ 1, 4, 6, 4, 1 },
Индексы многомерных массивов следуют в порядке от внешнего к внутренним. Так, например, pascalsTriangle ; Где typeOfArray - это тип массива, а length - его длина (то есть, количество ячеек), выраженная в целых числах (int). Однако здесь мы только выделили память под массив, но не связали созданный массив ни с какой объявленной ранее переменной. Обычно массив сначала объявляют, а потом создают, например: int myArray; // объявление массива myArray = new int [ 10 ] ; // создание, то есть, выделение памяти для массива на 10 элементов типа int Здесь мы объявили массив целых чисел по имени myArray , а затем сообщили, что он состоит из 10 ячеек (в каждой из которых будет храниться какое-то целое число). Однако гораздо чаще массив создают сразу после объявления с помощью такого сокращённого синтаксиса: int myArray = new int [ 10 ] ; // объявление и выделение памяти “в одном флаконе” Обратите внимание: После создания массива с помощью new , в его ячейках записаны значения по умолчанию. Для численных типов (как в нашем примере) это будет 0, для boolean - false , для ссылочных типов - null . Таким образом после операции int myArray = new int [ 10 ] ; мы получаем массив из десяти целых чисел, и, пока это не измениться в ходе программы, в каждой ячейке записан 0.
Статьи на поиск и сортировку: Сортировка и поиск в курсе CS50: |
Главные характеристики массива: тип помещённых в него данных, имя и длина.
Последнее решается при инициализации (выделении памяти под массив), первые два параметра определяются при объявлении массива.
Размер массива (количество ячеек) нужно определять в int
Изменить длину массива после его создания нельзя.
Доступ к элементу массива можно получить по его индексу.
В массивах, как и везде в Java, элементы нумеруются с нуля.
После процедуры создания массива он наполнен значениями по умолчанию.
Массив в языке Java значительно отличается от массива в языке C++. Однако он практически совпадает с указателем на динамический массив.
Хорошая подробная статья о массивах
В статье описаны некоторые методы класса Array
Первая лекция JavaRush, посвящённая массивам.
Начнем, пожалуй, последнюю не очень приятную и интересную, но очень важную и полезную тему в теории языка Java — массивы. Далее будет более интересный и увлекательный материал, который можно будет использовать для более практичных задач. Но, чтобы начать интересную часть явы нужно выучить неинтересную)) которая и является основой языка и без которой невозможно дальше учить программирование.
Все предыдущие темы, который мы рассматривали: , являются основами программирования. С их изучения Вы будете начинать любой другой язык программирования. Массивы тоже относятся к такой теме. На чем бы Вы не решили начать программировать, Вы вряд ли сможете обойтись без массивов. Поэтому, я советую очень хорошо освоить данный и прошлый материал, если Вы хотите преуспеть в программировании.
Теперь перейдем к массивам.
Массив — это структура данных, которая предназначена для хранения однотипных данных.
Допустим, Вам нужно создать 5 целочисленных переменных и задать им некоторое значение. Как Вы это будете делать? Не зная массивов, Вы скорее всего начнете писать вот так: int a = 2, b = 3, c = 5, d = 21, e = 2;
Имея в арсенале такой тип данных как массивы, Вы можете писать так: int a = {2, 3, 5, 21, 2};
Это очень удобно, когда имеет место обработка этих данных. Например, теперь Вам нужно к каждой переменной добавить 3. Если бы Вы использовали первый способ объявления, то такая операция заняла бы у Вас достаточно много времени. Тогда как имея в арсенале массивы и , мы можем обрабатывать огромное количество данных не прибегая к монотонному коду.
Перед тем как использовать, массив нужно:
Запомните это порядок действий и никогда не нарушайте его.
Объявление массивов:
char s;
String p;
или
char s;
String p;
Создание массивов:
s = new char;
p = new String;
В квадратных скобках указано количество элементов массива. Это количество нельзя
будет поменять потом.
Инициализация массивов:
после создания – поэлементно: int a = {1,2,3,4,5};
при объявлении/создании – массив целиком: int b = new int {2, 4 ,6};.
Если массив явно не проинициализирован, то после его создания все
элементы равны:
0 – в числовых массивах
false – в boolean-массивах
null – в массивах объектов
Границы массивов:
У всех массивов есть поле length – длина массива (в элементах)
Первый элемент всегда имеет индекс 0 (не путать со значением).
Последний элемент всегда имеет индекс length-1.
После такого количества теории, думаю, нужно немного практики:
public class ArraysInJava {
int intArray; //объявление массива
intArray = new int [ 10] ; //инициализация массива
intArray[ 0] = 1 ; //первому элементу массива даем значение 1
intArray[ 1] = 2 ; //второму значение 2
intArray[ 6] = 7 ; //остальные значения массива, которым мы
//не задали значений будут по умолчанию 0
//соответствует значению в квадратных скобках при инициалазации.
for (int i = 0 ; i < intArray.length ; i++ ) {
for (int i = 0 ; i < intArray.length ; i++ ) {
intArray[ i] = 45 ; //каждый элемент массива может быть изменен
Результат выполнения кода:
Мы рассмотрели одномерные массивы в Java. Сейчас пришла очередь двумерных.
Как Вы уже могли догадаться двумерный массив — это массив массивов. Не нужно пугаться. Все намного проще, чем кажется.
int twoDim = new int — вот так можно объявить двумерный массив с размерностью 4 на 4. Будет 4 элемента по вертикали и 4 по горизонтали. Задать значение таком массиву так же просто как и одномерному: twoDim = 3. Эта запись будет означать, что мы задали нашему элементу массива, которых находится во втором ряде (индекс начинается с 0) и 3 столбике. На рисунке это будет вот так:
Кстати, вот пример кода:
Многомерные массивы могут иметь сколько угодно размерностей. Объявление, инициализация и работа с ними идентична одномерным массивам. Если Вы научитесь работать с одномерными и двумерными массивами, то с трехмерными и выше проблем не будет.
Еще пример. Точнее задание. Я хочу, чтобы Вы подумали и написали приложение, которое выводит числа в таком порядке:
Подсказка: System.out.println(); — печатает с новой строки, тогда как: System.out.print() — печатает в той самой строке.
Прежде, чем смотреть на решение, попробуйте написать его сами. Это очень закрепляет пройденный материал.
Для тех, кто не осилил, предлагаю решение. Не огорчайтесь. Программирование требует времени и терпения.
public class FormatMatrixPrint {
int size = 5 ;
– это упорядоченная совокупность, или пронумерованный список, значений ссылка на который выполняется по общему имени. Это могут быть как примитивные значения, так и объекты или даже другие массивы, однако все значения массива должны принадлежать одному типу. Тип массива идентичен типу содержащихся в нем значений.
Массивы относятся к ссылочным типам данных , собственно как и все остальные типы, кроме примитивных. Напомню еще раз, что в Java все является объектом, исключение составляют лишь примитивные типы.
Массивы могут быть одномерными и многомерными.
Процесс создания массива можно разделить на три этапа:
Объявление (declaration) массива
На этом этапе определяется только переменная типа ссылка (reference ) на массив , содержащая тип массива. Для этого записывается имя типа элементов массива, квадратными скобками указывается, что объявляется ссылка на массив , а не простая переменная, и перечисляются имена переменных ссылочного типа, например:
numbers ; // numbers ссылка на массив int-овПо существу объявление массивов, точно такая же операция как и объявление любых других типов данных, правда имеющая немного свой синтаксис, так как это все таки массивы.
Java поддерживает еще один синтаксис объявления переменных типа массив, обеспечивающий совместимость с С и С++. Согласно этому синтаксису, одна или несколько пар квадратных скобок следуют за именем переменной, а не за именем типа:
arrayOfBytes ; // То же, что и byte arrayOfBytesОднако зачастую такой синтаксис сбивает с толку, поэтому его следует избегать. В следующем примере, легко спутать что имелось в виду:
rates , maxRate ; // может хотели объявить два массива?Такой синтаксис не рекомендуется использовать, так как уже говорилось, что он сбивает с толку, кроме того, в соглашения по оформлению Java кода, рекомендуется синтаксис, который был приведен первым, то есть квадратные скобки следуют сразу за типом объявляемого массива.
В данном случае объявлены массив значений типа float с именем rates и переменная типа float – maxRate.
То есть, если квадратные скобки стоят сразу после типа объявляемого массива, то все переменные которые объявлены в этой строке являются ссылками на массивы объявляемого типа, а если же скобки стоят справа от переменной, то только она является ссылкой на массив объявленного типа.
Следует понимать, что данная операция объявления массива еще не создает массив, а только объявляет переменную являющуюся ссылкой на него , которую без инициализации нельзя использовать в программе, так как компилятор выдаст ошибку, что переменная массива не инициализирована.
Пока объявленная переменная массива не определена, она может содержать (если вы присвоите) значение null . И только после определения она будет содержать ссылку на конкретный объект.
Указать длину массива при объявлении переменной массива невозможно, поскольку размер является строго функцией объекта массива, а не ссылки на него .
Создание (instantation) массива
На этом этапе указывается количество элементов массива, называемое его размером, выделяется место для массива в оперативной памяти, переменной-ссылке присваивается оператором = адрес массива. Все эти действия производятся оператором new за которым следует тип элементов массива. Например:
= new char [ 10 ] ;Но стоит еще раз заметить, что до этого переменная letters, должна быть объявлена как массив. Чтобы было более понятно, это можно представить вот так:
letters ; // объявили letters как ссылку на массив символов charПри создании массива с таким синтаксисом все элементы массива автоматически инициализируются значениями по умолчанию . Это false для значений boolean, "\u0000" для значений char, 0 для целых значений, 0.0 для значений с плавающей точкой и null для объектов или массивов.
В Java размер массива фиксирован. Созданный массив нельзя увеличить или уменьшить. Желаемый размер создаваемого массива задается неотрицательным целым числом . Но в любое время переменной типа массива может быть сопоставлен новый массив другого размера. То есть может быть присвоена ссылка на другой массив того же типа что и объявленная переменная.
Индексы массивов всегда начинаются с 0 .
Первые две операции: объявление и создание массива можно объединить в один оператор. Например:
letters = new char [ 10 ] ;Этот оператор эквивалентен двум приведенным выше.
После данной операции переменная letters будет уже содержать ссылку на массив и если попробовать вывести ее значение то мы получим значение, что то вроде
;
int
b
=
a
;
Но надо иметь в виду, что переменные a и b указывают на один и тот же массив. По началу это может сбивать с толку, но если помнить что мы имеем дело с ссылочными типами данных, то все становится на свои места. Если этот момент не понятен, то чуть позже мы все это разберем на примерах.
= null ;После этого массив, на который указывала данная ссылка, теряется, если на него не было других ссылок .
Размер или длину массива можно получить при помощи константы length , которая определена для каждого массива и возвращает его длину. Мы ей уже не раз пользовались в примерах когда работали с аргументами переданной в командной строке.
Можно создавать и использовать массивы нулевой длины (пустой массив). Например:
bits = new boolean [ 0 ] ;Инициализировать такой массив нельзя, так как у него просто нет элементов которые можно инициализировать. Сразу же возникает вопрос, а на кой ляд они тогда вообще нужны эти пустые массивы? Но они нужны и даже очень полезны!
Пустой массив принято использовать в тех местах программы, где заранее неизвестно, будут элементы или нет. Если элементы будут, то возвращается непустой массив, если элементов нет - пустой массив. Примером может служить массив строк который передается в метод main() и содержит аргументы командной строки, а если их нет, то возвращается пустой массив.
Пустой массив лучше, чем null , потому что не требует отдельного if"а для обработки. То же верно для списков и других коллекций. Именно поэтому существуют методы Collections.emptyList, emptySet, emptyMap.
Инициализация (initialization) массива
На этом этапе элементы массива получают начальные значения. Инициализировать элементы массива значениями можно несколькими способами:
Обращается к конкретному элементу массива можно по его индексу , который начинается с нуля, как это уже говорилось.
Индексы можно задавать любыми целочисленными выражениями, кроме типа long , например a , a , a[++i] . Исполняющая система Java следит за тем, чтобы значения этих выражений не выходили за границы длины массива. Если же выход все же произойдет интерпретатор Java в таком случае прекратит выполнение программы и выведет на консоль сообщение о выходе индекса массива за границы его определения (ArrayIndexOutOfBoundsException ).
Рассмотрим пример первого способа инициализации:
ar = new int [ 2 ] ;Второй способ инициализации можно реализовать по разному.
Инициализацию массива можно совместить с этапом создания, но до этой операции массив уже должен быть объявлен . Например:
ar ; // объявление массиваДо создания и инициализации массива ar он уже был объявлен.
Так же инициализировать массив можно на этапе его объявления следующим синтаксисом:
ar = { 1 , 2 } ; // объявление, создание и инициализация массиваВнимание! Этот синтаксис инициализации массива работает только при объявлении массива и совмещает сразу все три операции объявление, создание и инициализацию. Если массив уже объявлен, то такой синтаксис использовать нельзя. Компилятор выдаст ошибку. То есть:
int
ar
;
// объявление массива
ar
=
{
1
,
2
}
;
// ОШИБКА!!! создание и инициализация массива
Такое действо не прокатит.
Так же можно инициализировать на этапе объявления и чуть чуть по другому:
ar = new int { 1 , 2 } ; // объявление, создание и инициализацияХотя этот синтаксис более длинный. Если вы заметили, то данный синтаксис это тоже совмещение всех трех операций: объявления, создания и инициализации.
В Java предусмотрен синтаксис, который поддерживает анонимные массивы (они не присваиваются переменным и, следовательно, у них нет имен). Иногда массив нужно задействовать лишь один раз (например, передать его методу), следовательно, вы не хотите тратить время на присваивание его переменной, поэтому можно сразу же использовать результат оператора new . Например:
. out . println ( new char { "H" , "e" , "l" , "l" , "o" }) ;Синтаксис инициализации массивов с помощью фигурных скобок называется литеральным, поскольку для инициализации используется массив-литерал.
Важно понимать что массивы-литералы создаются и инициализируются во время выполнения программы, а не во время ее компиляции . Рассмотрим следующий массив-литерал:
perfectNumbers = { 6 , 28 } ;Он компилируется в такой байт-код Java:
perfectNumbers = new int [ 2 ] ;Поэтому если вам нужно разместить в Java программе много данных, лучше не включать их непосредственно в массив, поскольку компилятору Java придется создавать много байткодов инициализации массива, а затем интерпретатору Java нужно будет кропотливо выполнять весь этот код. В таких случаях лучше сохранять данные во внешнем файле и считывать их в программу во время ее выполнения.
Однако тот факт, что Java инициализирует массив во время выполнения программы, имеет важные последствия. Это означает, что элементы массива-литерала являются произвольными выражениями, вычисляемыми во время выполнения программы, а не постоянными выражениями, вычисляемыми компилятором . Например:
points = { circle1.getCenterPoint () , circle2.getCenterPoint () } ;Теперь немножко попрактикуемся.
В хорошо нам известном методе main(), как раз и используется возможность возврата массива нулевой длины если в командной строке нет аргументов, что позволяет избежать использования оператора if для проверки на null, дабы избежать ошибки во время исполнения программы.
То есть мы сразу можем использовать массив в цикле, правда соблюдая правила чтобы не выйти за пределы максимального индекса.
В начале программы мы выводим значение длины массива, а затем в первом цикле последовательно выводим все значения элементов массива. Второй цикл делает то же самое, но извращенным способом.
Второй пример я привет чтобы порадовать ваш мозг расширить ваше сознание вам не было скучно знали как можно делать, но как не нужно, ну и чисто в учебно-образовательных целях. Может на досуге разберетесь как работает второй цикл.
Данная программа генерирует следующий вывод:
В первом случае мы не вводили ни каких аргументов, поэтому получили массив нулевой длины, который не был обработан в циклах, поскольку не удовлетворяет условиям циклов.
Во втором случае мы передали аргументы в командной строке и следовательно массив был обработан в циклах.