| Назад
    Вперед 1.4. Работа с массивамиВ примере демонстрируются различные приемы
    работы с одномерными, многомерными и
    несимметричными массивами.  Исходный текст примера Архив проекта для Java WorkShop 2.0  Немного теории Массивы в Java, как и во многих других языках
    программирования, обозначаются квадратными
    скобками. Эти скобки могут располагаться справа
    от имени массива или от типа объектов, из которых
    составлен массив. Заметим, что массив в языке Java
    может содержать не только переменные базовых
    типов, но и объекты произвольных классов.  При определении массива не резервируется
    память, поэтому размеры массива не указываются.
    Для резервирования памяти применяется ключевое
    слово new. После выполнения этой операции размер
    массива становится фиксированным. Инициализация массива может быть как
    статической, так и динамической.  Массивы бывают многомерными и несимметричными.
     Описание примераВ нашем примере демонстрируются различные
    методы работы с массивами - статическими,
    динамическими, многомерными и несимметричными.  Простой массив значений типа intВнутри метода main мы объявили массив iNumbers,
    содержащий переменные базового типа int:  int[] iNumbers; Как и полагается, размер массива не указан, так
    как при объявлении массива память для него не
    резервируется.  В следующей строке мы резервируем память для
    хранения 10 переменных типа int. Ссылку на эту
    память мы записываем в переменную iNumbers, завершая
    таким образом инициализацию массива:  iNumbers = new int[10]; Дополнительно мы объявляем переменную i,
    которая будет применяться для индексации этого и
    других массивов:  int i; Запись значений в ячейки массива выполняется
    простым присваиванием в цикле:  for(i = 0; i < 10; i++)
  iNumbers[i] = i; После завершения этого процесса программа
    отображает на консоли значения, хранящиеся в
    массиве:  System.out.print("iNumbers: [" 
  + iNumbers[0]); 
    
for(i = 1; i < iNumbers.length; i++)
  System.out.print("," + iNumbers[i]); 
      
System.out.println("]");Здесь мы вначале выводим на консоль содержимое
    первого элемента массива, а затем и всех
    остальных.  Обратите внимание на то, как мы проверяем
    условие выхода за пределы массива. Параметр
    цикла i сравнивается со значением iNumbers.length.  Что это за значение?  Все массивы в Java являются объектами некоторого
    встроенного класса. Поле length этого класса
    содержит размер массива.  Массив объектов класса StringНиже в примере показано, как можно выполнить
    статическую инициализацию массива, содержащего
    объекты встроенного класса String,
    предназначенного для работы с текстовыми
    строками:  String szLines[] =
{
  "This",
  "is",
  "Java",
  "String",
  "array"
};Здесь одновременно с объявлением массива мы
    выполняем и его инициализацию.  Отображение элементов массива на консоли
    выполняется в цикле и не имеет никаких
    особенностей:  System.out.print(szLines[0]);
for(i=1; i<szLines.length; i++)
  System.out.print(" " + szLines[i]);Многомерный массив объектов класса StringВ следующем фрагменте кода мы объявляем
    двухмерный массив объектов класса String и сразу
    резервируем для него память:  String[][] szColors = new String[2][4]; Таким образом создается массив из двух строк и
    четырех столбцов.  Для работы со строками таблицы мы будем
    использовать переменную i, определенную ранее.
    Чтобы перебирать столбцы таблицы, в программе
    определена переменная j:  int j; Массив szColors заполняется в двойном вложенном
    цикле:  for(i = 0; i < 2; i++)
  for(j = 0; j < 3; j++)
  {
    szColors[i][j] = 
      new String("Color (" + i + "," 
        + j + ")");
  }При этом для каждой ячейки таблицы мы
    заказываем память оператором new.  Вывод содержимого таблицы на консоль
    выполняется также в двойном вложенном цикле, как
    это показано ниже:  for(i = 0; i < 2; i++)
  for(j = 0; j < 3; j++)
  {
    System.out.println(szColors[i][j]); 
  }При определении массива szSounds мы задаем только
    количество строк:  String[][] szSounds = new String[2][]; Что же касается количества столбцов, то оно
    задается динамически при заполнении массива:  for(i = 0; i < szSounds.length; i++)
{
  szSounds[i] = new String[3];
  for(j = 0; j < szSounds[i].length; j++)
  {
    szColors[i][j] = 
      new String("Sound (" + i + "," 
        + j + ")");
  }     
}Здесь в каждой строке имеется три столбца,
    поэтому мы имеем дело с симметричным массивом.
    Содержимое этого массива мы выводим на консоль
    следующим образом:  for(i = 0; i < szSounds.length; i++)
  for(j = 0; j < szSounds[i].length; j++)
  {
    System.out.println(szColors[i][j]); 
  }Обратите внимание на то, как мы проверяем
    границы массива. Количество строк у нас - это
    значение szSounds.length. Количество столбцов в строке
    определяется как szSounds[i].length. В случае
    симметричного массива szSounds оно одинаковое для
    каждой строки.  Несимметричный массив объектов класса StringОпределяя несимметричный массив iAsymm,
    мы сначала не указываем, сколько в нем столбцов и
    строк:  String[][] iAsymm; Далее при резервировании памяти для массива мы
    задаем только количество строк, равное двум:  iAsymm = new String[2][]; Затем в каждой строке задается разное
    количество столбцов: в первой строке - три
    столбца, а во второй - четыре:  iAsymm[0] = new String[3];
iAsymm[1] = new String[4]; Инициализируя несимметричный массив в двойном
    вложенном цикле мы не можем полагаться на то, что
    каждая строка содержит одинаковое количество
    столбцов. Поэтому предельное значение
    переменной внутреннего цикла определяется как iAsymm[i].length:  for(i = 0; i < iAsymm.length; i++)
{
  for(j = 0; j < iAsymm[i].length; j++)
  {
    iAsymm[i][j] = 
      new String("Asymm (" + i + "," 
        + j + ")");
  }     
}Для первой строки оно равно трем, а для второй -
    четырем.  Содержимое несимметричного массива
    распечатывается на консоли следующим образом:  for(i = 0; i < iAsymm.length; i++)
{
  for(j = 0; j < iAsymm[i].length; j++)
  {
    System.out.println(iAsymm[i][j]); 
  }     
 }
}Здесь границы переменных внешнего и
    внутреннего циклов указаны как iAsymm.length и
    iAsymm[i].length, соответственно.  Результаты работы программыРезультаты работы нашей программы, выполняющей
    различные действия над массивами, показаны ниже:  iNumbers: [0,1,2,3,4,5,6,7,8,9]
This is Java String array
Colors array:
Color (0,0)
Color (0,1)
Color (0,2)
Color (1,0)
Color (1,1)
Color (1,2)
Sounds array:
Sound (0,0)
Sound (0,1)
Sound (0,2)
Sound (1,0)
Sound (1,1)
Sound (1,2)
Asymmetric array:
Asymm (0,0)
Asymm (0,1)
Asymm (0,2)
Asymm (1,0)
Asymm (1,1)
Asymm (1,2)
Asymm (1,3) Назад Вперед |