Массив (англ. Array) это объект, хранящий в себе фиксированное количество значений одного типа. Другими словами, массив — это нумерованный набор переменных. Переменная в массиве называется элементом массива, а ее позиция в массиве задается индексом. Например, нам нужно хранить 50 различных имен, согласитесь, неудобно для каждого имени создавать отдельную переменную, поэтому мы будем использовать массив. Нумерация элементов массива начинается с 0, а длинна массива устанавливается в момент его создания и фиксируется.
Для наглядности картинка, взятая мною с The Java Tutorial.
Для того чтобы создать массив нужно его объявить, зарезервировать для него память и инициализировать.
Объявление массива в Java
При создании массива в Java первым делом его нужно объявить. Это можно сделать следующим образом:
int[] myFirstArray;
Можно также объявить массив так:
int mySecondArray[];
Однако, это не приветствуется соглашением по оформлению кода в Java, поскольку скобки обозначают то, что мы имеем дело с массивом и логичнее, когда они находятся рядом с обозначением типа.
Исходя из данного примера, мы объявили 2 массива с именами myFirstArray и mySecondArray. Оба массива будут содержать элементы типа int.
Подобным образом можно объявить массив любого типа:
byte[] anArrayOfBytes;
short[] anArrayOfShorts;
long[] anArrayOfLongs;
float[] anArrayOfFloats;
double[] anArrayOfDoubles;
boolean[] anArrayOfBooleans;
char[] anArrayOfChars;
String[] anArrayOfStrings;
...
Тип массива задается следующим образом type[], где type это тип данных содержащихся в нем элементов. Скобки являются специальным обозначением того, что переменные содержатся в массиве. Имя массива может быль любым, однако, оно должно соответствовать правилам именования переменных.
Массивы можно создавать не только из переменных базовых типов, но и из произвольных объектов.
При объявлении массива в языке Java не указывается его размер и не резервируется память для него. Происходит лишь создание ссылки на массив.
Резервация памяти для массива и его инициализация.
Далее, для объявленного myFirstArray, зарезервируем память при помощи ключевого слова new.
int[] myFirstArray;
myFirstArray = new int[15];
В нашем примере мы создали массив из 15 элементов типа int и присвоили его ранее объявленной переменной myFirstArray.
Объявлять имя массива и резервировать для него память также можно на одной строке.
int[] myArray = new int[10];
При создании массива с помощью ключевого слова new, все элементы массива автоматически инициализированы нулевыми значениями. Для того, чтобы присвоить элементам массива свои начальные значения, необходимо провести его инициализацию. Инициализацию можно проводить как поэлементно
myFirstArray[0] = 10; // инициализация первого элемента
myFirstArray[1] = 20; // инициализация второго элемента
myFirstArray[2] = 30; // и т.д.
так и в цикле, с помощью индекса проходя все элементы массива и присваивая им значения.
for(int i = 0; i < 15; i++){
myFirstArray[i] = 10;
}
Как видно из предыдущих примеров, для того, чтобы обратиться к элементу массива, нужно указать его имя и, затем, в квадратных скобках — индекс элемента. Элемент массива с конкретным индексом ведёт себя также, как и переменная.
Рассмотрим создание и инициализацию массива на следующем примере. В нем мы создаем массив, содержащий цифры 0-9 и выводим значения на консоль.
//создание и инициализация массива
int[] numberArray = new int[10];
for(int i = 0; i < 10; i++){
numberArray[i] = i;
}
//вывод значений на консоль
for(int i = 0; i < 10; i++){
System.out.println((i+1) + "-й элемент массива = " + numberArray[i]);
}
Упрощенная форма записи
Для создания и инициализации массива можно также использовать упрощенную запись. Она не содержит слово new, а в скобках перечисляются начальные значения массива.
int[] myColor = {255, 255, 0};
Здесь длина массива определяется числом значений, расположенных между скобками и разделенных запятыми. Такая запись больше подходит для создания небольших массивов
Определение размера массива
Размер массива не всегда очевиден, поэтому для того, чтобы его узнать следует использовать свойство length, которое возвращает длину массива.
myColor.length;
Данный код поможет нам узнать, что длина массива myColor равна 3.
Пример: Задано 4 числа, необходимо найти минимальное
int[] numbers = {-9, 6, 0, -59};
int min = numbers[0];
for(int i = 0; i < numbers.length; i++){
if(min>numbers[i])
min = numbers[i];
}
System.out.println(min);
Упражнения на тему одномерные массивы в Java:
- Создайте массив, содержащий 10 первых нечетных чисел. Выведете элементы массива на консоль в одну строку, разделяя запятой.
- Дан массив размерности N, найти наименьший элемент массива и вывести на консоль (если наименьших элементов несколько — вывести их все).
- В массиве из задания 2. найти наибольший элемент.
- Поменять наибольший и наименьший элементы массива местами. Пример: дан массив {4, -5, 0, 6, 8}. После замены будет выглядеть {4, 8, 0, 6, -5}.
- Найти среднее арифметическое всех элементов массива.
Подскажите а как решить такой пример found minimal values that occurs in both arrays. Очень нужна ваша помощь
сначала ищите минимальное значение в первом массиве, потом во втором
http://pastebin.com/NyQJ65Vv Подскажите пожалуйста, что значит ошибка
Exception in thread «main» java.lang.ArrayIndexOutOfBoundsException: 5
at Learn2v1.main(Learn2v1.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Буду признателен если подскажете как исправить
http://pastebin.com/Uc9cPdKN — упрощенный вид программы без рандома. Как я понял ошибка была именно в нём. Подскажите в чём был, собственно косяк. Спасибо)
Это ошибка означает, что вы вышли за границы массива, тоесть попытались произвести запись в несуществующую ячейку.
Спасибо, сейчас буду искать ошибку
Действительно у меня там ошибка номера элемента массива, который ищется относительно n, а не i. Извиняюсь за беспокойство)
ничего страшного, будьте внимательнее)
for(int i = 0; i < 15; i++){
myFirstArray[i] = 10;
}
так у вас тут тоже за индекс выходит.
с чего вдруг? Массив myFirstArray изначально создавался под 15 элементов, в этом цикле он заполняется с 0 по 14й элемент включительно. Где выход за индекс?
Добрый день Мария! проверьте первое задание пожалуйста http://pastebin.com/Apme9stM
Только не получается сделать что бы с 1-цы выводил значения.
Спасибо.
поменяйте строчки 8 и 9 местами
Спасибо.Все всегда проще чем кажется)
Добрый день Мария!Вопрос по второму заданию.Сначала мы находим минимальное число,запоминаем его индекс.И во втором цикле начинаем поиск со следующего индекса.Возможно ли так сделать? http://pastebin.com/zR2wv84g
Возможно, но у вас код не верный. Если делать второй цикл, то его нужно делать не вложенный, а после выполнения первого цикла.
1 цикл — ищем минимум, запоминаем его индекс в отдельную переменную min_i. 2 цикл (не вложенный)начиная от индекса min_i+1 проверяем если есть еще числа, которые равны уже найденному минимуму, выводим их индексы (их может быть больше чем 2).
Так верно? http://pastebin.com/ptW1BXsC . но я так понимаю мой вариант только если минимальных значения 2)
да у вас только на 2 минимальных расчитано, но ведь их может быть больше. Во втором цикле проверяйте сразу равенство элементов, а не ищите снова минимум.
Спасибо за советы!Нужного результата я добился,все работает. Но что-то подсказывает мне, что с кодом я намудрил! http://pastebin.com/8bGvNY6V
Теперь все впорядке, но меня пугает то, что у вас название класса написано по-русски)). Еще, в данном случае лучше выводить индексы этих минимальных элементов, чем сами значения. Значение то одно. Можно такой вывод сделать. Минимальное число х находится на на позициях y1, y2,…