Similar presentations:
Массивы в Java
1. Массивы в Java
2. Массивы
Массив – упорядоченный набор элементов одного типа.Индекс – номер элемента в массиве.
2
3. Массивы
Массивможно
представить, как набор
пронумерованных ячеек, в
каждую из которых можно
поместить данные, но
только
один
элемент
данных в одну ячейку.
Доступ
к
конкретной
ячейке
осуществляется
через её номер.
3
4. Массивы
Элементами могут быть значения простых и ссылочныхтипов
Массивы сами по себе являются объектами и наследуют
от класса Object
Индекс
Значение
Индекс
0
1
2
3
4
5
6
7
Значение
-5
3
4
8
8
2
1
3
0
1
2
3
4
5
6
7
Китай
США
Россия
Канада
ЮАР
Франция
Южная Корея
Индия
4
5. Доступ к элементам массива
Доступ к элементам массива осуществляется по целочисленному индексу спомощью оператора []
countries
Индекс
Значение
0
1
2
3
4
5
6
7
Китай
США
Россия
Канада
ЮАР
Франция
Южная Корея
Индия
2
countries[2]
Россия
5
6. Объявление, инициализация, заполнение
Объявлениеint[] array;
int oldFishion[];
Инициализация
array = new int[20];
Заполнение
array[0] = 10;
array[1] = 15;
Способ «3 в 1»
byte[] b = {0, 2, 4, 8, 16, 32};
passToMethod(new long[] {1, 2, 3, 4, 5});
6
7. Работа с одномерными массивами
Форма объявления ссылки на массив с квадратными скобками после типаэлемента является более предпочтительной
Объект массива создается с помощью оператора new
Массив при этом заполняется значениями по умолчанию для типа его
элементов (0, false или null)
Нумерация в массивах начинается с 0
Длина массива хранится в публичном неизменяемом поле length
Изменить длину массива после создания его объекта невозможно
7
8. Заполнение массива случайными числами
java.util.Random rnd = new java.util.Random();int array[] = new int[20];
for (int i = 0; i < array.length; i++)
array[i] = rnd.nextInt(100);
8
9. Печать массива
public class Main {public static void main(String[] args) {
int array[] = new int[20];
for (int i = 0; i < array.length; i++)
System.out.printf("array[%d]=%d\n",i,array[i]);
}
}
9
10. Класс java.util.Arrays
Метод void sort(int[] myArray, int, int toIndex) сортируетмассив целых чисел или его часть (от fromIndex до
toIndex) по возрастанию.
Метод ищет int binarySearch(int[] myArray, int fromIndex,
int toIndex, int key) элемент key в уже отсортированном
массиве myArray или его части (от fromIndex до toIndex).
Если элемент найден, метод возвращает его индекс, если
нет -1.
Метод String toString(int[] myArray) преобразовывает
массив к строке.
10
11. Пример java.util.Arrays
import java.util.Arrays;public class Main {
public static void main(String[] args) {
int[] array = {1, 5, 4, 3, 7}; //объявляем и инициализируем массив
System.out.println(Arrays.toString(array));//печатаем массив
Arrays.sort(array); //сортируем массив
System.out.println(Arrays.toString(array));//отсортированный массив
int key = Arrays.binarySearch(array, 5); // ищем число 5
System.out.println(key);//распечатываем индекс числа 5
}
}
11
12. Задача №1
Сгенерировать массив строк из 36 элементов,представляющий колоду игральных карт. Каждая карта
представлена мастью (♠, ♣, ♥, ♦) и достоинством (6, 7, 8, 9,
10, В, Д, К, Т). Например, «♣10».
а) вывести массив на консоль;
b) перемешать колоду.
12
13. UNICODE-код символа
char suits[] = {'\u2660', '♥' /*'\u2665'*/,'\u2663', '\u2666'};
System.out.print(java.util.Arrays.toString(suits));
13
14. Задача №1: решение
char suits[] = {'\u2660', '♥' /*'\u2665'*/, '\u2663', '\u2666'};String values[] = {"6", "7", "8", "9", "10", "В", "Д", "К", "T"};
String cards[] = new String[36];
int count = 0;
for (int i = 0; i < 4; i++)
for (int j = 0; j < values.length; j++)
cards[count++] = suits[i]+values[j];
System.out.println(java.util.Arrays.toString(cards));
Random rnd = new Random();
for (int i=0; i<cards.length*2; i++)
{
int k = rnd.nextInt(cards.length);
int m = rnd.nextInt(cards.length);
String temp = cards[m];
cards[m] = cards[k];
cards[k] = temp;
}
System.out.println(java.util.Arrays.toString(cards));
14
15. Задача №3
В странах Востока использовался календарь, представляющий собой 60-летнююциклическую систему. Каждый 60-летний цикл состоит из пяти 12-летних подциклов. В
каждом подцикле года носят названия животных: Крыса, Корова, Тигр, Заяц, Дракон,
Змея, Лошадь, Овца, Обезьяна, Петух, Собака и Свинья.
Кроме того, в названии года фигурируют цвета животных, которые связаны с пятью
элементами природы — Деревом (зеленый), Огнем (красный), Землей (желтый),
Металлом (белый) и Водой (черный).
В результате каждое животное (и его год) имеет символический цвет, причем цвет
этот часто совершенно не совпадает с его "естественной" окраской — Тигр может быть
черным, Свинья — красной, а Лошадь — зеленой.
Например, 1984 год — год начала очередного цикла — назывался годом Зеленой
Крысы. Каждый цвет в цикле (начиная с зеленого) "действует" два года, поэтому через
каждые 60 лет имя года (животное и его цвет) повторяется.
Составить программу, которая по заданному номеру года нашей эры n печатает его
название по описанному календарю в виде: "Крыса, Зеленый".
15
16. Задача №3
Используя датчик случайных чисел, заполнить массив издвадцати элементов неповторяющимися числами.
16
17. Задача №4
Дан массив ненулевых целых чисел. Определить, сколькораз элементы массива при просмотре от его начала меняют
знак. Например, в массиве 10, –4, 12, 56, –4, –89 знак
меняется 3 раза.
17
18. Многомерные массивы
Состоят из одномерных массивов, элементами которыхявляются ссылки на массивы меньшей размерности
При создании объекта необязательно указывать все
размерности
Массив необязательно должен быть «прямоугольным»
// Автоматическая
int[][] twoDimArr = new int[10][5];
// Вручную
int[][] twoDimArr = new int[10][];
for (int i = 0; i < 10; i++)
twoDimArr[i] = new int[i];
// Явно
int[][] arr3 = { {0}, {0, 1}, {0, 2, 4} };
18
19. Печать двумерного массива
int[][] arr = { {30, 5}, {0, 1}, {10, 30, 20} };for (int j = 0; j < arr.length; j++) {
for (int i = 0; i < arr[j].length; i++)
System.out.printf("%3d", arr[j][i]);
System.out.println();
}
19
20. Просмотр массива с помощью foreach
int[] array = new int[] { 1, 2, 3, 4, 5 };for (int i : array){
System.out.println(i);
}
20
21. Домашнее задание: Задача №1
При выборе места строительства жилого комплекса при металлургическомкомбинате необходимо учитывать "розу ветров" (следует расположить жилой
комплекс так, чтобы частота ветра со стороны металлургического комбината
была бы минимальной).
Для этого в течение года проводилась регистрация направления ветра в
районе строительства. Данные представлены в виде массива, в котором
направление ветра за каждый день кодируется следующим образом:
1 — северный, 2 — южный, 3 — восточный, 4 — западный, 5 — северозападный, 6 — северо-восточный, 7 — юго-западный, 8 — юго-восточный.
Определить, как должен быть расположен жилой комплекс по отношению к
комбинату.
21
22. Домашнее задание: Задача №2
Пользователь с помощью консоли вводит количество строк иколичество столбцов двумерного массива. Разработать программу,
заполняющую массив натуральными числами
«змейкой» как
показано на рисунке нет.
22