SlideShare uma empresa Scribd logo
1 de 25
Обсуждаемые вопросы
 Определение и характеристики массива
 Принципы работы с массивами
 Объявление (декларация)
 Создание (выделение памяти)
 Инициализация массивов
 Типовые алгоритмы обработки одномерных
  массивов
 Двухмерные массивы
 Непрямоугольные двухмерные массивы

                                           2
Определение и характеристики
 Массив - группа элементов одного
  типа, имеющих одно имя и различающихся по
  номеру элемента внутри массива – индексу
 Массивы в Java являются объектами встроенного
  класса, => они имеют ряд атрибутов и
  методов, облегчающих работу с ними и
  предоставляющих дополнительные возможности
 Характеристики массива:
   Мерность (количество измерений)
     Одномерные массивы (векторы)
     Двухмерные массивы (матрицы)
     Многомерные массивы

   Размер (кол-во элементов) каждого измерения

                                                  3
Принципы работы
 Объявление переменной-ссылки на массив
  (декларация)
 Создание объекта-массива (выделение памяти)
 Инициализация (присвоение начальных значений)
 Обработка (обращение к элементам)




                                                  4
Объявление
 Синтаксис объявления массива
  Тип[] имя;     или   Тип имя[];

 Например, одномерный массив целых чисел:
  int[] iData;   или   int iData[];

 Если переменная объявлена, но ещё не
  инициализирована, выделение памяти под массив
  не производится
 => Указывать размер массива на этом этапе нельзя
 Создаётся переменная, кот. в будущем будет
  содержать ссылку на массив создаваемый
  динамически

                                                     5
Создание (выделение памяти)
 Синтаксис:
    Имя = new Тип [размер];
 Пример – создание массива целых чисел из 10 элем.:
    iData= new int [10];
 В отличие от локальных переменных, элементы массивов
 примитивных типов инициализируются значениями по
 умолчанию
   Числовые элементы – нулями
   Символьные – значением ‘0’ (нулевой символ)
   Логические – значением false
   Массивы объектов – значениями null
 Можно создать массив сразу при его определении:
   Int n = getSize();
   Int []iData= new int [n];
                                                         6
Обработка
 Массивы обрабатываются не целиком, а поэлементно
 Доступ к элементу массива осуществляется по его индексу
    (номеру)
   Как правило, доступ к элементам массива осуществляется в
    цикле
   Начальный элемент массива в Java имеет номер 0
   Конечный элемент массива из N элементов имеет номер N-1
   Например:
    boolean[] barr = new boolean[3];         flag будет иметь
    boolean flag = barr[0];                  значение false

    int[] arr = new int[3];                  a будет иметь
    Int a = arr[0];                          значение 0

    Напоминание: локальные переменные, в отличие от элементов
    массива, не инициализируются по умолчанию. Во избежание ошибок
    при компиляции они должны быть инициализированы явно.
                                                                     7
Инициализация
 При создании переменной-ссылки на массив
 можно явно произвести его инициализацию, что
 приведёт к созданию массива, выделению
 необходимого объёма памяти и размещению в ней
 заданных значений:
 int a[] = new int[] {5, 7, 9};
 int temper[] = {25,28,31,26,33,30,32,24,30,32};

 Массив temper будет состоять из 10-ти элементов и
 занимать в памяти 40 байт
 Примечание: в Java любая инициализация переменных выполняется на
 этапе выполнения, а не компиляции. Поэтому для инициализации
 можно использовать не только литеральные константы, но и переменные
 и значения выражений.

                                                                       8
Типовые алгоритмы обработки
 Присвоение начальных значений или генерация
  значений элементов случайным образом
 Поиск элемента массива и его номера
   Максимальный
   Минимальный
   Заданный
 Обработка значений
   Вычисление суммы, разности, произведения,
    среднего арифметического и т.п.
       безусловное и условное вычисление
 Сортировка элементов массива (упорядочение)
 Перестановка элементов массива

                                                9
Пример обработки
Подсчёт среднего арифметического температуры

int temper[] = {25,28,31,26,33,30,32,24,30,32};

double avg;
int sum = 0;
int n = temper.length;
for (int i = 0; i < n; i++) {
       sum += temper[i];
}

avg = (double)sum / n;




                                                  10
Проход по всем элементам
 В Java есть специальная форма цикла for, которая
 упрощает полный перебор всех элементов массива или
 коллекции
   for (Тип Имя_Переменной : Имя_массива) {
          тело цикла;
   }

 Например:
   for (int t : temper) {
          sum += t;
   }
 В некоторых других языках (Perl, PHP, VB и др.) подобный
  цикл записывается как «for each» («для каждого
  элемента»)
 Отсутствие счётчика делает применение этого вида цикла
  ограниченным                                         11
Свойство length
 Для прохода по всем элементам массива можно
 использовать цикл со счётчиком for, используя в
 качестве верхней границы свойство объекта-
 массива length:
 for (int i = 0; i < temper.length; i++) {
        sum += temper[i];
 }


 Использование свойства length делает программу
  более универсальной и не зависящей от
  конкретного значения размера массива
 Использование этого свойства предпочтительно

                                                   12
Двухмерные массивы
 Создание и инициализация двухмерного массива:
 public class Matr {
 public static void main(String[] args) {
  double a[][] = { { 1.0, 9.0, 3.1 },
                   { 0.2, 1.0, 5.8 },
                   { 3.7, 0.4, 1.0 } };
  for( int i=0; i < 3; i++ ) {
      String s = "";
      for( int j=0; j < 3; j++ ) {
                s += (" "+a[i][j]);
       }
      System.out.println( s );
    }
  }
 }


                                                  13
Непрямоугольные массивы
 В Java разные измерения одного и того же массива
  могут иметь разные размеры
 Пример: создание треугольного массива:
int[][] arr;
       arr = new int[3][];     // это ошибка: new int[][3]
       arr[0] = new int[1];
       arr[1] = new int[2];
       arr[2] = new int[3];
 for( i = 0; i < 3; i++ )
   for( int j=0; j <= i; j++ ) arr[i][j] = j;

 String s = "";
 for( i = 0; i < 3; i++ ) {
      s = "";
      for(int j = 0; j <= i; j++ ) s += (arr[i][j]+"   ");
      System.out.println( s );
  }
                                                             14
Выход за границы массива
 Во время выполнения приложения виртуальная
  машина Java отслеживает выход за границы массива.
 Если приложение пытается выйти за границу
  массива, генерируется исключение
  java.lang.ArrayIndexOutOfBoundsException




                                                 15
Копирование массивов
 Если присвоить одной переменной-ссылке на
    массив другую переменную-ссылку на массив, то
    будет скопирован только адрес массива:
   int[] a = new int [3]; int[] b = a;
   Если изменить элемент массива b, то это скажеться
    и на массиве а, т.к. эти переменные-ссылки
    указывают на один и тот же массив.
   Скопировать значения элементов массива можно в
    цикле
   Есть системный метод копирования массивов:
   System.arraycopy(a, index1a, b, index1b, count);
   Из а в b копируются count элементов начиная с
    индекса index1a в массиве а. Они размещаются в
    массиве b начиная с индекса index1b.
                                                        16
Методы обработки массивов
 Используется класс Arrays из пакета java.util (т.е.
    нужно импортировать этот пакет: import java.util.*)
   Arrays.fill(mas, znach) – заполняет массив
    одинаковыми значениями znach
   Arrays.equals(a, b) – сравнивает два массива по
    элементам. (Сравнивать a == b нельзя, т.к. будут
    сравниваться адреса массивов, а не значения)
   Arrays.sort(a) – сортирует массив
   И др.




                                                          17
Рассмотрены вопросы:
 Определение и характеристики массива
 Принципы работы с массивами
 Объявление (декларация)
 Создание (выделение памяти)
 Инициализация массивов
 Типовые алгоритмы обработки одномерных
  массивов
 Двухмерные массивы
 Непрямоугольные двухмерные массивы

                                           18
Комментарии к заданиям
 Каждое задание состоит из нескольких частей в
  порядке возрастания их сложности
 Вы можете выполнить несколько заданий по
  одному пункту, либо все пункты одного задания и
  т.д. в зависимости от вашего уровня
 Не обязательно делать все задания!




                                                    19
Задания
 В одномерном массиве, состоящем из п
    вещественных элементов, вычислить:
   1) сумму отрицательных элементов массива;
   2) произведение элементов массива,
    расположенных между максимальным и ми­
   нимальным элементами.
   Упорядочить элементы массива по возрастанию.




                                                   20
Задания
 в одномерном массиве, состоящем из п целых
    элементов, вычислить:
   1) произведение элементов массива с четными
    номерами;
   2) сумму элементов массива, расположенных между
    первым и последним нуле­
   выми элементами.
   Преобразовать массив таким образом, чтобы сначала
    располагались все положи­
   тельные элементы, а потом — все отрицательные
    (элементы, равные О, считать
   положительными).

                                                        21
Задания
 в одномерном массиве, состоящем из п вещественных
    элементов, вычислить:
   1) максимальный элемент массива; Упражнения к
    части I 1 3 7
   2) сумму элементов массива, расположенных до
    последнего положительного эле­
   мента.
   Сжать массив, удалив из него все элементы, модуль
    которых находится в интер-
   вале [а,Ь]. Освободившиеся в конце массива элементы
    заполнить нулями.

                                                          22
Задания
 в одномерном массиве, состоящем из п целых
    элементов, вычислить:
   1) минимальный по модулю элемент массива;
   2) сумму модулей элементов
    массива, расположенных после первого элемента,
   равного нулю. 1 3 8 Часть I. Структурное
    программирование
   Преобразовать массив таким образом, чтобы в первой
    его половине располага-
   лись элементы, стоявшие в четных позициях, а во
    второй половине — элементы,
   стоявшие в нечетных позициях.

                                                     23
Задания
 Дана целочисленная прямоугольная матрица.
  Определить:
 1) количество строк, не содержащих ни одного
  нулевого элемента;
 2) максимальное из чисел, встречающихся в
  заданной матрице более одного раза.




                                                 24
Задания
 Дана целочисленная прямоугольная матрица.
  Определить:
 1) количество столбцов, содержащих хотя бы один
  нулевой элемент;
 2) номер строки, в которой находится самая
  длинная серия одинаковых элементов.




                                                    25

Mais conteúdo relacionado

Mais procurados

Razbiraemsya s preobrazovaniem_tipov
Razbiraemsya s preobrazovaniem_tipovRazbiraemsya s preobrazovaniem_tipov
Razbiraemsya s preobrazovaniem_tipovRodion Golovushkin
 
Java. Полиморфизм.
Java. Полиморфизм.Java. Полиморфизм.
Java. Полиморфизм.Unguryan Vitaliy
 
OOP in JavaScript - Presentation by Eugene Kalosha
OOP in JavaScript - Presentation by Eugene KaloshaOOP in JavaScript - Presentation by Eugene Kalosha
OOP in JavaScript - Presentation by Eugene KaloshaRostyslav Siryk
 
Java. Generic - шаблонные типы.
Java.  Generic - шаблонные типы.Java.  Generic - шаблонные типы.
Java. Generic - шаблонные типы.Unguryan Vitaliy
 
Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Stfalcon Meetups
 
Msu.Center.Lectures.J01 Introducing Java
Msu.Center.Lectures.J01 Introducing JavaMsu.Center.Lectures.J01 Introducing Java
Msu.Center.Lectures.J01 Introducing Javaolegol
 
Практикум по выполнению блока с информатика
Практикум по выполнению блока с информатикаПрактикум по выполнению блока с информатика
Практикум по выполнению блока с информатикаЕкатерина Луговова
 
01 - Знакомство с Java
01 - Знакомство с Java01 - Знакомство с Java
01 - Знакомство с Javaphearnot
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011etyumentcev
 
Java. Введение в коллекции. Классы обертки. Перечисленияю
Java. Введение в коллекции. Классы обертки.  ПеречисленияюJava. Введение в коллекции. Классы обертки.  Перечисленияю
Java. Введение в коллекции. Классы обертки. ПеречисленияюUnguryan Vitaliy
 
javascript_part1
javascript_part1javascript_part1
javascript_part1sovest
 
Дмитрий Васильев Dart for js devs
Дмитрий Васильев Dart for js devsДмитрий Васильев Dart for js devs
Дмитрий Васильев Dart for js devsAnton Anokhin
 
Java. Строки. Класс String.
Java. Строки. Класс String.Java. Строки. Класс String.
Java. Строки. Класс String.Unguryan Vitaliy
 
Вторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ruВторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ruAlexander Shcherbinin
 
Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Unguryan Vitaliy
 

Mais procurados (20)

Razbiraemsya s preobrazovaniem_tipov
Razbiraemsya s preobrazovaniem_tipovRazbiraemsya s preobrazovaniem_tipov
Razbiraemsya s preobrazovaniem_tipov
 
десант презентация
десант презентациядесант презентация
десант презентация
 
Java. Полиморфизм.
Java. Полиморфизм.Java. Полиморфизм.
Java. Полиморфизм.
 
OOP in JavaScript - Presentation by Eugene Kalosha
OOP in JavaScript - Presentation by Eugene KaloshaOOP in JavaScript - Presentation by Eugene Kalosha
OOP in JavaScript - Presentation by Eugene Kalosha
 
Java. Методы
Java. Методы Java. Методы
Java. Методы
 
Java. Generic - шаблонные типы.
Java.  Generic - шаблонные типы.Java.  Generic - шаблонные типы.
Java. Generic - шаблонные типы.
 
Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Discovering Lambdas in Java 8
Discovering Lambdas in Java 8
 
Msu.Center.Lectures.J01 Introducing Java
Msu.Center.Lectures.J01 Introducing JavaMsu.Center.Lectures.J01 Introducing Java
Msu.Center.Lectures.J01 Introducing Java
 
fp intro
fp introfp intro
fp intro
 
Практикум по выполнению блока с информатика
Практикум по выполнению блока с информатикаПрактикум по выполнению блока с информатика
Практикум по выполнению блока с информатика
 
01 - Знакомство с Java
01 - Знакомство с Java01 - Знакомство с Java
01 - Знакомство с Java
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011
 
моап 2011 04
моап 2011 04моап 2011 04
моап 2011 04
 
Java. Введение в коллекции. Классы обертки. Перечисленияю
Java. Введение в коллекции. Классы обертки.  ПеречисленияюJava. Введение в коллекции. Классы обертки.  Перечисленияю
Java. Введение в коллекции. Классы обертки. Перечисленияю
 
javascript_part1
javascript_part1javascript_part1
javascript_part1
 
Дмитрий Васильев Dart for js devs
Дмитрий Васильев Dart for js devsДмитрий Васильев Dart for js devs
Дмитрий Васильев Dart for js devs
 
Java. Строки. Класс String.
Java. Строки. Класс String.Java. Строки. Класс String.
Java. Строки. Класс String.
 
Step 2
Step 2Step 2
Step 2
 
Вторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ruВторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ru
 
Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.
 

Destaque

Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейГотовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейSkillFactory
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действииNikita Lipsky
 
Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Anton Moiseenko
 
Java. Lecture 05. Handling Exceptions and Debugging
Java. Lecture 05. Handling Exceptions and DebuggingJava. Lecture 05. Handling Exceptions and Debugging
Java. Lecture 05. Handling Exceptions and Debuggingcolriot
 
Java Core. Lecture#6. Part#1. Generics.
Java Core. Lecture#6. Part#1. Generics.Java Core. Lecture#6. Part#1. Generics.
Java Core. Lecture#6. Part#1. Generics.Anton Moiseenko
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAlex Tumanoff
 
Коллекции в Java
Коллекции в JavaКоллекции в Java
Коллекции в Javametaform
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Javametaform
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...metaform
 
Как улучшить результаты, используя софт для рекрутинга
 Как улучшить результаты, используя софт для рекрутинга Как улучшить результаты, используя софт для рекрутинга
Как улучшить результаты, используя софт для рекрутингаCleverStaff
 
урок ц о
урок ц оурок ц о
урок ц оsemyurihor
 
Maven как средство сборки проекта
Maven как средство сборки проектаMaven как средство сборки проекта
Maven как средство сборки проектаYova Stoika
 
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...Nikita Lipsky
 

Destaque (19)

Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейГотовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
 
math
mathmath
math
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действии
 
Exceptions
ExceptionsExceptions
Exceptions
 
Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.
 
ABOUT PACKAGES
ABOUT PACKAGESABOUT PACKAGES
ABOUT PACKAGES
 
Java. Lecture 05. Handling Exceptions and Debugging
Java. Lecture 05. Handling Exceptions and DebuggingJava. Lecture 05. Handling Exceptions and Debugging
Java. Lecture 05. Handling Exceptions and Debugging
 
Java Core. Lecture#6. Part#1. Generics.
Java Core. Lecture#6. Part#1. Generics.Java Core. Lecture#6. Part#1. Generics.
Java Core. Lecture#6. Part#1. Generics.
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey Teplyakov
 
Коллекции в Java
Коллекции в JavaКоллекции в Java
Коллекции в Java
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...
 
кобзар
кобзаркобзар
кобзар
 
Как улучшить результаты, используя софт для рекрутинга
 Как улучшить результаты, используя софт для рекрутинга Как улучшить результаты, используя софт для рекрутинга
Как улучшить результаты, используя софт для рекрутинга
 
урок ц о
урок ц оурок ц о
урок ц о
 
Maven как средство сборки проекта
Maven как средство сборки проектаMaven как средство сборки проекта
Maven как средство сборки проекта
 
JavaFX Real-World Apps
JavaFX Real-World AppsJavaFX Real-World Apps
JavaFX Real-World Apps
 
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
 

Semelhante a Массивы в Java

массивы в паскале
массивы в паскалемассивы в паскале
массивы в паскалеAnn Eres
 
C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.Igor Shkulipa
 
291 цикл уроков на тему массивы
291 цикл уроков на тему  массивы291 цикл уроков на тему  массивы
291 цикл уроков на тему массивыsany0507
 
Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.Unguryan Vitaliy
 
Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Technopark
 
Ruby: работа с массивами
Ruby: работа с массивамиRuby: работа с массивами
Ruby: работа с массивамиEvgeny Smirnov
 
Одномерные массивы целых чисел
Одномерные массивы целых чиселОдномерные массивы целых чисел
Одномерные массивы целых чиселAndrey Dolinin
 
AlgoCollections (RUS)
AlgoCollections (RUS)AlgoCollections (RUS)
AlgoCollections (RUS)Anton Bukov
 
Одномерные массивы
Одномерные массивыОдномерные массивы
Одномерные массивыsneshachok
 
лабораторная работа №4
лабораторная работа №4лабораторная работа №4
лабораторная работа №4Gulnaz Shakirova
 
Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Technopark
 
лабораторная работа №7
лабораторная работа №7лабораторная работа №7
лабораторная работа №7Gulnaz Shakirova
 

Semelhante a Массивы в Java (20)

87
8787
87
 
04 array
04 array04 array
04 array
 
массивы в паскале
массивы в паскалемассивы в паскале
массивы в паскале
 
C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.
 
291 цикл уроков на тему массивы
291 цикл уроков на тему  массивы291 цикл уроков на тему  массивы
291 цикл уроков на тему массивы
 
Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.
 
одномерные массивы
одномерные массивыодномерные массивы
одномерные массивы
 
Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1
 
Ruby: работа с массивами
Ruby: работа с массивамиRuby: работа с массивами
Ruby: работа с массивами
 
Одномерные массивы целых чисел
Одномерные массивы целых чиселОдномерные массивы целых чисел
Одномерные массивы целых чисел
 
AlgoCollections (RUS)
AlgoCollections (RUS)AlgoCollections (RUS)
AlgoCollections (RUS)
 
Одномерные массивы
Одномерные массивыОдномерные массивы
Одномерные массивы
 
sda
sdasda
sda
 
лабораторная работа №4
лабораторная работа №4лабораторная работа №4
лабораторная работа №4
 
лабораторная работа №4
лабораторная работа №4лабораторная работа №4
лабораторная работа №4
 
лабораторная работа №4
лабораторная работа №4лабораторная работа №4
лабораторная работа №4
 
Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2Алгоритмы и структуры данных осень 2013 лекция 2
Алгоритмы и структуры данных осень 2013 лекция 2
 
лабораторная работа №7
лабораторная работа №7лабораторная работа №7
лабораторная работа №7
 
лабораторная работа №7
лабораторная работа №7лабораторная работа №7
лабораторная работа №7
 
Lec 4
Lec 4Lec 4
Lec 4
 

Mais de metaform

Приступаем к разработке Android приложений
Приступаем к разработке Android приложенийПриступаем к разработке Android приложений
Приступаем к разработке Android приложенийmetaform
 
работа с потоками ввода вывода
работа с потоками ввода выводаработа с потоками ввода вывода
работа с потоками ввода выводаmetaform
 
обработка исключений в Java
обработка исключений в Javaобработка исключений в Java
обработка исключений в Javametaform
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
создание живых сайтов
создание живых сайтовсоздание живых сайтов
создание живых сайтовmetaform
 
Составление резюме
Составление резюмеСоставление резюме
Составление резюмеmetaform
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеmetaform
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansmetaform
 
Мастерство речи, искусство презентации
Мастерство речи, искусство презентацииМастерство речи, искусство презентации
Мастерство речи, искусство презентацииmetaform
 

Mais de metaform (9)

Приступаем к разработке Android приложений
Приступаем к разработке Android приложенийПриступаем к разработке Android приложений
Приступаем к разработке Android приложений
 
работа с потоками ввода вывода
работа с потоками ввода выводаработа с потоками ввода вывода
работа с потоками ввода вывода
 
обработка исключений в Java
обработка исключений в Javaобработка исключений в Java
обработка исключений в Java
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
создание живых сайтов
создание живых сайтовсоздание живых сайтов
создание живых сайтов
 
Составление резюме
Составление резюмеСоставление резюме
Составление резюме
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследование
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
 
Мастерство речи, искусство презентации
Мастерство речи, искусство презентацииМастерство речи, искусство презентации
Мастерство речи, искусство презентации
 

Массивы в Java

  • 1.
  • 2. Обсуждаемые вопросы  Определение и характеристики массива  Принципы работы с массивами  Объявление (декларация)  Создание (выделение памяти)  Инициализация массивов  Типовые алгоритмы обработки одномерных массивов  Двухмерные массивы  Непрямоугольные двухмерные массивы 2
  • 3. Определение и характеристики  Массив - группа элементов одного типа, имеющих одно имя и различающихся по номеру элемента внутри массива – индексу  Массивы в Java являются объектами встроенного класса, => они имеют ряд атрибутов и методов, облегчающих работу с ними и предоставляющих дополнительные возможности  Характеристики массива:  Мерность (количество измерений)  Одномерные массивы (векторы)  Двухмерные массивы (матрицы)  Многомерные массивы  Размер (кол-во элементов) каждого измерения 3
  • 4. Принципы работы  Объявление переменной-ссылки на массив (декларация)  Создание объекта-массива (выделение памяти)  Инициализация (присвоение начальных значений)  Обработка (обращение к элементам) 4
  • 5. Объявление  Синтаксис объявления массива Тип[] имя; или Тип имя[];  Например, одномерный массив целых чисел: int[] iData; или int iData[];  Если переменная объявлена, но ещё не инициализирована, выделение памяти под массив не производится  => Указывать размер массива на этом этапе нельзя  Создаётся переменная, кот. в будущем будет содержать ссылку на массив создаваемый динамически 5
  • 6. Создание (выделение памяти)  Синтаксис: Имя = new Тип [размер];  Пример – создание массива целых чисел из 10 элем.: iData= new int [10];  В отличие от локальных переменных, элементы массивов примитивных типов инициализируются значениями по умолчанию  Числовые элементы – нулями  Символьные – значением ‘0’ (нулевой символ)  Логические – значением false  Массивы объектов – значениями null  Можно создать массив сразу при его определении: Int n = getSize(); Int []iData= new int [n]; 6
  • 7. Обработка  Массивы обрабатываются не целиком, а поэлементно  Доступ к элементу массива осуществляется по его индексу (номеру)  Как правило, доступ к элементам массива осуществляется в цикле  Начальный элемент массива в Java имеет номер 0  Конечный элемент массива из N элементов имеет номер N-1  Например: boolean[] barr = new boolean[3]; flag будет иметь boolean flag = barr[0]; значение false int[] arr = new int[3]; a будет иметь Int a = arr[0]; значение 0 Напоминание: локальные переменные, в отличие от элементов массива, не инициализируются по умолчанию. Во избежание ошибок при компиляции они должны быть инициализированы явно. 7
  • 8. Инициализация  При создании переменной-ссылки на массив можно явно произвести его инициализацию, что приведёт к созданию массива, выделению необходимого объёма памяти и размещению в ней заданных значений: int a[] = new int[] {5, 7, 9}; int temper[] = {25,28,31,26,33,30,32,24,30,32};  Массив temper будет состоять из 10-ти элементов и занимать в памяти 40 байт Примечание: в Java любая инициализация переменных выполняется на этапе выполнения, а не компиляции. Поэтому для инициализации можно использовать не только литеральные константы, но и переменные и значения выражений. 8
  • 9. Типовые алгоритмы обработки  Присвоение начальных значений или генерация значений элементов случайным образом  Поиск элемента массива и его номера  Максимальный  Минимальный  Заданный  Обработка значений  Вычисление суммы, разности, произведения, среднего арифметического и т.п.  безусловное и условное вычисление  Сортировка элементов массива (упорядочение)  Перестановка элементов массива 9
  • 10. Пример обработки Подсчёт среднего арифметического температуры int temper[] = {25,28,31,26,33,30,32,24,30,32}; double avg; int sum = 0; int n = temper.length; for (int i = 0; i < n; i++) { sum += temper[i]; } avg = (double)sum / n; 10
  • 11. Проход по всем элементам  В Java есть специальная форма цикла for, которая упрощает полный перебор всех элементов массива или коллекции for (Тип Имя_Переменной : Имя_массива) { тело цикла; }  Например: for (int t : temper) { sum += t; }  В некоторых других языках (Perl, PHP, VB и др.) подобный цикл записывается как «for each» («для каждого элемента»)  Отсутствие счётчика делает применение этого вида цикла ограниченным 11
  • 12. Свойство length  Для прохода по всем элементам массива можно использовать цикл со счётчиком for, используя в качестве верхней границы свойство объекта- массива length: for (int i = 0; i < temper.length; i++) { sum += temper[i]; }  Использование свойства length делает программу более универсальной и не зависящей от конкретного значения размера массива  Использование этого свойства предпочтительно 12
  • 13. Двухмерные массивы  Создание и инициализация двухмерного массива: public class Matr { public static void main(String[] args) { double a[][] = { { 1.0, 9.0, 3.1 }, { 0.2, 1.0, 5.8 }, { 3.7, 0.4, 1.0 } }; for( int i=0; i < 3; i++ ) { String s = ""; for( int j=0; j < 3; j++ ) { s += (" "+a[i][j]); } System.out.println( s ); } } } 13
  • 14. Непрямоугольные массивы  В Java разные измерения одного и того же массива могут иметь разные размеры  Пример: создание треугольного массива: int[][] arr; arr = new int[3][]; // это ошибка: new int[][3] arr[0] = new int[1]; arr[1] = new int[2]; arr[2] = new int[3]; for( i = 0; i < 3; i++ ) for( int j=0; j <= i; j++ ) arr[i][j] = j; String s = ""; for( i = 0; i < 3; i++ ) { s = ""; for(int j = 0; j <= i; j++ ) s += (arr[i][j]+" "); System.out.println( s ); } 14
  • 15. Выход за границы массива  Во время выполнения приложения виртуальная машина Java отслеживает выход за границы массива.  Если приложение пытается выйти за границу массива, генерируется исключение java.lang.ArrayIndexOutOfBoundsException 15
  • 16. Копирование массивов  Если присвоить одной переменной-ссылке на массив другую переменную-ссылку на массив, то будет скопирован только адрес массива:  int[] a = new int [3]; int[] b = a;  Если изменить элемент массива b, то это скажеться и на массиве а, т.к. эти переменные-ссылки указывают на один и тот же массив.  Скопировать значения элементов массива можно в цикле  Есть системный метод копирования массивов:  System.arraycopy(a, index1a, b, index1b, count);  Из а в b копируются count элементов начиная с индекса index1a в массиве а. Они размещаются в массиве b начиная с индекса index1b. 16
  • 17. Методы обработки массивов  Используется класс Arrays из пакета java.util (т.е. нужно импортировать этот пакет: import java.util.*)  Arrays.fill(mas, znach) – заполняет массив одинаковыми значениями znach  Arrays.equals(a, b) – сравнивает два массива по элементам. (Сравнивать a == b нельзя, т.к. будут сравниваться адреса массивов, а не значения)  Arrays.sort(a) – сортирует массив  И др. 17
  • 18. Рассмотрены вопросы:  Определение и характеристики массива  Принципы работы с массивами  Объявление (декларация)  Создание (выделение памяти)  Инициализация массивов  Типовые алгоритмы обработки одномерных массивов  Двухмерные массивы  Непрямоугольные двухмерные массивы 18
  • 19. Комментарии к заданиям  Каждое задание состоит из нескольких частей в порядке возрастания их сложности  Вы можете выполнить несколько заданий по одному пункту, либо все пункты одного задания и т.д. в зависимости от вашего уровня  Не обязательно делать все задания! 19
  • 20. Задания  В одномерном массиве, состоящем из п вещественных элементов, вычислить:  1) сумму отрицательных элементов массива;  2) произведение элементов массива, расположенных между максимальным и ми­  нимальным элементами.  Упорядочить элементы массива по возрастанию. 20
  • 21. Задания  в одномерном массиве, состоящем из п целых элементов, вычислить:  1) произведение элементов массива с четными номерами;  2) сумму элементов массива, расположенных между первым и последним нуле­  выми элементами.  Преобразовать массив таким образом, чтобы сначала располагались все положи­  тельные элементы, а потом — все отрицательные (элементы, равные О, считать  положительными). 21
  • 22. Задания  в одномерном массиве, состоящем из п вещественных элементов, вычислить:  1) максимальный элемент массива; Упражнения к части I 1 3 7  2) сумму элементов массива, расположенных до последнего положительного эле­  мента.  Сжать массив, удалив из него все элементы, модуль которых находится в интер-  вале [а,Ь]. Освободившиеся в конце массива элементы заполнить нулями. 22
  • 23. Задания  в одномерном массиве, состоящем из п целых элементов, вычислить:  1) минимальный по модулю элемент массива;  2) сумму модулей элементов массива, расположенных после первого элемента,  равного нулю. 1 3 8 Часть I. Структурное программирование  Преобразовать массив таким образом, чтобы в первой его половине располага-  лись элементы, стоявшие в четных позициях, а во второй половине — элементы,  стоявшие в нечетных позициях. 23
  • 24. Задания  Дана целочисленная прямоугольная матрица. Определить:  1) количество строк, не содержащих ни одного нулевого элемента;  2) максимальное из чисел, встречающихся в заданной матрице более одного раза. 24
  • 25. Задания  Дана целочисленная прямоугольная матрица. Определить:  1) количество столбцов, содержащих хотя бы один нулевой элемент;  2) номер строки, в которой находится самая длинная серия одинаковых элементов. 25