Добрый день. В этом уроке мы поговорим о массивах. Что бы вам было более наглядно понятно что это означает. Представьте себя роли бухгалтера какой нибудь фирмы, в которой работаю 200 человек. Где необходимо посчитать к примеру среднею зарплату сотрудников, вычислить общую выплату работникам. Или да же сортировать их по убыванию или увеличению. Тот кто не знает что такое массив, создал бы 200 переменных, которым присвоил различные значения, и проводил с ними дальнейшие манипуляции. Но это трудоемко и время затратно. А ждать пока вы сделаете отчет никто не будет. На самом деле массивы очень сильно облегчают работу программистам. И вы сможете в этом убедиться сами.
Сортировка массива пузырьковым методом.
Сортировка с помощью метода sort() из класса arrays;
Массив.
Массивы используются для хранения больших объемов однотипных данных. К примеру в одном массиве не может хранится данные типа int и string. Что бы вам было проще понять представьте коробку в которую можно поместить к примеру игрушку, но нельзя помещать в нее посуду, так как это разный тип. Размер массива можно представить как несколько коробок, в которые помещены различные игрушки, в первую к примеру мы поместим машинку, во вторую автобус, в третью грузовик итд.
рис 8
В квадратных скобках указывается индекс (порядковый номер коробки в которую поместили игрушку) у нас он равен 3. Да да не удивляйтесь, я не ошибся, просто в программировании отсчет начинается не с 1, а с 0.
Инициализация массива.
Возьмем наш пример из рисунка 8. В листинге 8.1 мы инициализируем массив типа String и вносим в него значения (машинка, автобус, грузовик) . Индекс в нашем массиве сформировался автоматически, теперь в массиве model [2] индекс 2 с 3 значениями. Так же можно указать явный размер массива при инициализации, это вы можете увидеть из листинга 8.2
1 |
String [] model={"машинка","автобус","грузовик"}; |
листинг 8.1
1 2 3 4 5 |
String [] type=new String[3];//инициализируем массив type[0]="машинка"; //вносим каждое значение type[1]="машинка"; //согласно своему индексу type[2]="машинка"; |
листинг 8.2
Создание массива проходит в 3 этапа.
- Объявление переменной массива.
- Выделения в памяти места для хранения значений элементов массива.
- Присваивание переменной массива ссылки значения на массив.
В листинге 8.2 после выделения памяти оператору new мы указываем для чего мы выделяем, в данном случаи это одномерный массив. Указываем тип массива, у нас он String, и в квадратных скобках указываем количество элементов в массиве, у нас это [3].
Но как же нам посмотреть что находиться в массиве? Очень просто, можно использовать цикл со счетчиком for и вывести все возможные значения, путем перебора индекса. В этом можете убедится из листинга 8.3.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package myfirstprogramm; /** * @author nookery.ru */ public class MyFirstProgramm { public static void main(String[] args) { String [] model={"машинка","автобус","грузовик"}; String [] type=new String[3]; type[0]="машинка"; type[1]="автобус"; type[2]="грузовик"; for(int i=0; i<3; i++){ System.out.println(model[i]); System.out.println(type[i]); } } } |
листинг 8.3
Вывод массива.
Приведенный пример из листинга 8.3 не совсем верный, так как зачастую мы можем и не знать размер массива, что приведет к сбою в работе программы. Для определения размера массива используется свойство lenght. листинг 8.4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package myfirstprogramm; /** * @author nookery.ru */ public class MyFirstProgramm { public static void main(String[] args) { String [] type=new String[3]; type[0]="машинка"; type[1]="автобус"; type[2]="грузовик"; for(int i=0; i<type.length; i++){ System.out.println(type[i]); } } } |
листинг 8.4
В программе листинга 8.4 мы создали массив типа String инициализировали его и указали явный размер. Внесли значения согласно индексу массива.В цикле for, с помощью свойства length выявили размер массива и вывели информацию в консоль. Инициализация будет у всех типов идентично типу String из примеров. Однако не забудьте что в массиве должен быть один тип данных.
Изменения массива.
Изменения данных в массиве происходит, путем указания ячейки индекса и присваивается другое значения. листинг 8.5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package myfirstprogramm; /** * @author nookery.ru */ public class MyFirstProgramm { public static void main(String[] args) { String [] type=new String[3]; type[0]="машинка"; type[1]="автобус"; type[2]="грузовик"; type[2]="самолет";//присваиваем другое значение for(int i=0; i<type.length; i++){ System.out.println(type[i]); } } } |
листинг 8.5
В программах часто встречается код сортировки массива. За чем спросите вы он нужен. Представьте у вас есть ряд чисел в значение которых в разброс, не имеет последовательности. Приведу еще пример, допустим у вас есть на работе работники в количестве 1000 человек каждый из которых имеет свою фамилию. Допустим надо найти вам Петрова, представьте сколько имен вам надо перебрать, если они не по алфавиту вписаны. Вот для таких примеров используют, методы сортировки массивов. Методов сортировки множество, мы с вами разберем самые известные, удобные в реализации кода.
Сортировка массива пузырьковым методом.
Суть алгоритма пузырьковым методом, в следующем. Подается массив который от начала до конца сравнивает попарно соседние элементы массива. Если элементы стоят в неверном порядке они меняются местами друг с другом. После первого прохождения массива в начале оказывается максимальное число, если мы использовали метод по убыванию, если по возрастанию соответственно оказывается наименьшее число. Затем проход массива повторяется, до тех пор пока все элементы массива не будут отсортированы. Внизу представлены варианты реализации кода сортировки по убыванию рис .8.6 и возрастанию на рисунке 8.7
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
package javaapplication119; /** * @author nookery.ru */ public class JavaApplication119 { public static void sort(int[] arr) { //сортировка пузырьковым методом for (int i = arr.length - 1; i > 0; i--) { for (int j = 0; j < i; j++) {// 0< 4 if (arr[j] < arr[j + 1]) { int tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } } public static void main(String[] args) { //создаем массив и присваиваем в него значения int[] a = {2, 3, 8, 4, 9, 6}; //запускаем метод sort(); sort(a); //Производим вывод массива for (int i = 0; i < a.length; i++) { System.out.println(a[i]); } } } |
рис. 8.6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
package javaapplication119; /** * @author nookery.ru */ public class JavaApplication119 { //сортировка массива по возрастанию public static void sort(int[] arr){ for(int i = arr.length-1 ; i > 0 ; i--){ for(int j = 0 ; j < i ; j++){ if( arr[j] > arr[j+1] ){ int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } } } public static void main(String[] args) { //Присваиваем по элементарно в массив числа. int[] a = {2, 3, 8, 4, 9, 6}; //сортируем спомощью метода sort(a); //выводим результат for (int i = 0; i < a.length; i++) { System.out.println(a[i]); } } } |
рис. 8.7
Сортировка с помощью метода sort() из класса arrays;
Прошли те времена когда программистам вообще нужно думать как реализовать ту или иную идею, все уже сделано, так сказать за нас. Сортировка массивов в этом не исключение. Сейчас мы рассмотрим метод sort();
Сортировка массива Java по возрастанию.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.util.Arrays; /** * @author nookery.ru */ public class ArraySort { public static void main(String[] args) { //создаем числовой массив int[] a = {2, 3, 8, 4, 9, 6}; Arrays.sort(a); //Выводим результат сортировки for (int i = 0; i < a.length; i++) { System.out.println(a[i]); } } } |
Сортировка массива по убыванию.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.util.Arrays; import java.util.Collections; /** * @author nookery.ru */ public class ArraySort { public static void main(String[] args) { //Тут надо родительский класс указывать Integer //вместо int Это необходимо для метода reverseOrder(); Integer[] a = {2, 3, 8, 4, 9, 6}; Arrays.sort(a, Collections.reverseOrder()); for (int i = 0; i < a.length; i++) { System.out.println(a[i]); } } } |
Сортировка по буквам (словам)происходит аналогично, в алфавитном порядке. Достаточно лишь создать массив String [] и вызвать метод Arrays.sort();
Домашнее задание:
- Создать массив типа int, вычислить среднее арифметическое значения массива.
- Создайте программу, где пользователю предложено ввести 10 раз, разные числа. Программа производит сортировку чисел и выводит их по убыванию в консоль.
- Написать программу, которая будет предлагать пользователю ввести текст, вам надо будет разбить ее на слова и поместить в массив, где необходимо преобразовать все строчные буквы в заглавные и вывести результат в консоль.