Как заполнить массив циклом java
Перейти к содержимому

Как заполнить массив циклом java

  • автор:

Как правильно создать массив через цикл for? Где ошибка?

Этот оператор создает массив, состоящий из 100 целых чисел.
Элементы этого массива нумеруются от 0 до 99 (а не от 1 до 100).
После создания массив можно заполнять, например, с помощью цикла.

1 2 3
int [ ] int [ ] а = new int[100]; for (int i = 0; i  100; i++) a[i] = i; // Заполняет массив числами от 0 до 99.

Но по факту, массив просто заполняется рядом цифр от 1 до 100,
как бы не менялись условия цикла, i

Добавлено через 1 минуту
** Последняя строка кода не пропечаталась
a[i] = i; // Заполняет массив числами от 0 до 99.

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как создать многочлен n-ой степени, где коэффициенты многочлена выводятся через массив?
как создать многочлен н-ой степени где коэффициенты многочлена выводятся через массив

Как правильно отобразить данные через цикл
Я написал код, он читает количество совпадений в тексте string line =.

Как правильно создать цикл или функцию
Добрый день! Подскажите пожалуйста, хочу сделать цикл или функцию что бы повторялось i-раз. Но не.

Как правильно закончить вод чисел через цикл while(cin>>x)?
Собственно вопрос состоит в том чтобы правильно закончить цикл while. Мне нужно чтобы после ввода.

Регистрация: 23.12.2016
Сообщений: 124

Попробую обьяснить просто, возможно ошибусь. Есть такая штука как стэк (можешь погуглить в интернете). По сути данные в нем хранятся по принцепу игры Jenga. Что такое массив? Это переменная с указателем на размер массива. Если смотреть на примере игры Jenga, то получается что у нас есть одна дощечка физическая, которую мы называем a[0], так же у нас есть еще 99 контейнеров для досок, которые мы можем заполить в удобный для нас момент. Назавать мы это контейнеры можем a[1] . a[99]. Получается что массив это одна переменная и определенный отступ для новых чисел, размер которого мы задаем в скобках.

Добавлено через 2 минуты
Но по факту, массив просто заполняется рядом цифр от 1 до 100,
как бы не менялись условия цикла, i

Попробуй прерформулировать вопрос. О какой ошибке ты говоришь?

Регистрация: 13.12.2017
Сообщений: 192
Согласен, для заполнения, достаточно

int [ ] int [ ] а = new int[100];

при print-е будет выводится от 1 до 100, но зачем остальные строки,
или это как раз прилюдия к print-у,

Я сначала подумал, что первая строчка — резервирует место, а for заполняет в заданном порядке,
но видимо это не так. . чайник.
WWN у меня ещё вопрос в теме
Функция, принимающая два аргумента и возвращающая все числа, которые делятся на заданный делитель, помоги разобратmся, зачем 2 for

Эксперт Java

3638 / 2970 / 918
Регистрация: 05.07.2013
Сообщений: 14,220

ЦитатаСообщение от Сергей_СПб Посмотреть сообщение

Как заполнить массив значениями, каждое из которых больше предыдущего на 3, с помощью цикла

Нужно создать пустой массив из 10 целых чисел и с помощью цикла заполнить его значениями, каждое из которых будет на 3 больше предыдущего (начиная с 1), то есть получить [1, 4, 7, 10, 13, 16, 19, 22, 25, 28] . Написал такой код:

public class massiv < public static void main(String[] args) < int[] array = new int[10]; array[0] = 1; for (int i = 0; i < array.length; i++) < array[i] = array[i] + 3; //вот тут туплю - не пойму как решить System.out.println(array[i]); >> > 

Как правильно заполнить массив?
Отслеживать
19.1k 6 6 золотых знаков 30 30 серебряных знаков 44 44 бронзовых знака
задан 27 фев 2017 в 12:55
135 1 1 золотой знак 2 2 серебряных знака 13 13 бронзовых знаков
array[i] = i*3 + 1;
27 фев 2017 в 13:01

6 ответов 6

Сортировка: Сброс на вариант по умолчанию

Цикл со второго элемента массива.

public static void main(String[] args) < int[] array = new int[10]; array[0] = 1; for (int i = 1; i < array.length; i++) < array[i] = array[i - 1] + 3;//вот тут туплю - не пойму как решить System.out.println(array[i]); >> 

До начала цикла мы присваиваем значение элементу [0]. Затем начинаем цикл с элемента [1]. На каждом шаге итерации мы используем предыдущий элемент для добавления к нему 3 и присвоения следующему элементу.

Так цикл работает:

array[1] = array[0] + 3. Получаем array[1] = 4.

Потом array[2] = array[1]+3. Получаем array[2] = 4+3 = 7, ну и т.д.

Отслеживать
ответ дан 27 фев 2017 в 12:59
KAGG Design KAGG Design
35.1k 4 4 золотых знака 24 24 серебряных знака 53 53 бронзовых знака
объясни автору почему array[i-1]
27 фев 2017 в 13:23

так вроде объяснили ниже в каментах. ОК, попытка №2 )) До начала цикла мы присваиваем значение элементу [0]. Затем начинаем цикл с элемента [1]. на каждом шаге итерации мы используем предыдущий элемент для добавления к нему 3 и присвоения следующему элементу. Так работает: array[1] = array[0] + 3. Получаем array[1] = 4. Потом array[2] = array[1]+3. Получаем array[2] = 4+3 = 7, ну и т.д.

27 фев 2017 в 13:39

Так-то у нас тут заведено объясни понимать как дополни ответ . Полезная инфа не должна пылиться в комментариях.

6. Массивы (Java. Базовый курс)

На данном уроке разберём что такое массивы, какие виды массивов бывают и как их использовать при разработке программ на Java.

Массивы

Часто на практике приходится работать с целыми наборами данных. Например для календаря нам нужен список названий месяцев, но как его хранить? Создавать 12 переменных и писать большое количество кода для работы с этими переменными? Это плохое решение, оно громоздкое, запутанное и неудобное. К счастью в языке Java есть отличная альтернатива — массивы.

Массив позволяет хранить целый набор данных определённого типа. По большому счёту массив можно представить себе как пронумерованный список или в более сложном случае — таблица. Массивы очень широко используются в приложениях и очень сильно упрощают обработку информации.

Одномерный массив

Одномерный массив представляет собой список однотипных элементов. На рисунке ниже приведён пример одномерного массива из 8 элементов:

Одномерный массив

В данном примере в качестве элементов массива выступают различные числа. Кроме этого, каждой ячейке массива соответствует свой индекс, по которому можно получить значение, записанное в ячейку. Обратите внимание что нумерация элементов массива начинается с нуля, это очень важный момент!

Общая форма объявления массива выглядит так:

тип_данных[] имя_массива = new тип_данных[размер_массива];

Напишем простую программу, которая по номеру месяца будет выводить его название:

Пример работы с одномерным массивом

В строке 8 инициализируется массив строк months размером в 12 элементов — ровно столько нам нужно для хранения всех названий месяцев:

String[] months = new String[12];

В строках с 9 по 20 в каждый элемент массива months записывается название месяца. Обращение к элементу идёт по его индексу в квадратных скобках — таким образом мы можем как записать данные в ячейку, так и прочитать. Важный момент — первый элемент имеет индекс 0, как я уже писал выше.

months[0] = "январь"; months[1] = "февраль"; months[2] = "март"; months[3] = "апрель"; months[4] = "май"; months[5] = "июнь"; months[6] = "июль"; months[7] = "август"; months[8] = "сентябрь"; months[9] = "октябрь"; months[10] = "ноябрь"; months[11] = "декабрь";

После того как массив заполнен элементами, программа просит пользователя ввести номер месяца и сохраняет его в переменную number:

Scanner input = new Scanner(System.in); System.out.println("Введите номер месяца:"); int number = input.nextInt();

Далее в строке 26 программа выводит в консоль название месяца, которое достаёт из массива по индексу. Так как нумерация индексов идёт с нуля, то мы должны из number вычесть единицу, чтобы получить правильное название месяца. Например 5 месяц в году это май, но в массиве значение “май” хранится в элементе с индексом 4, поэтому когда пользователь введёт номер 5, мы должны вычесть из него 1 и получим 4:

System.out.println(months[number-1]);

В данном случае я не сделал проверку на корректность ввода данных, поэтому если пользователь введёт неправильное число, например 100, то приложение выдаст ошибку ArrayIndexOutOfBoundsException. Это значит что была попытка обратиться к несуществующему элементу массива.

Полный листинг программы:

package ru.akutepov.example1; import java.util.Scanner; public class MonthByNumber < public static void main(String[] args) < String[] months = new String[12]; months[0] = "январь"; months[1] = "февраль"; months[2] = "март"; months[3] = "апрель"; months[4] = "май"; months[5] = "июнь"; months[6] = "июль"; months[7] = "август"; months[8] = "сентябрь"; months[9] = "октябрь"; months[10] = "ноябрь"; months[11] = "декабрь"; Scanner input = new Scanner(System.in); System.out.println("Введите номер месяца:"); int number = input.nextInt(); System.out.println(months[number-1]); >> 

Данный пример выглядит довольно громоздко, но есть способ его упростить. Познакомимся с ещё одной формой инициализации массива в Java:

тип_данных[] имя_массива = ;

Эта форма позволяет заполнять массив значениями сразу во время его инициализации, что сокращает количество кода.

Перепишем программу и посмотрим что получится:

Пример использования одномерного массива

Так гораздо лучше — код уже не выглядит таким громоздким, при этом логика осталась та же самая. В зависимости от ситуации можно использовать любую из форм инициализации массива.

Полный листинг программы:

package ru.akutepov.example2; import java.util.Scanner; public class MonthByNumber < public static void main(String[] args) < String[] months = ; Scanner input = new Scanner(System.in); System.out.println("Введите номер месяца:"); int number = input.nextInt(); System.out.println(months[number - 1]); > > 

Пример работы полученной программы:

Пример работы программы

Эту программу можно было бы написать без использования массива, например делать проверку номера месяца через оператор switch и выводить соответсвующее название. При этом решение с оператором switch тоже было бы вполне рабочим, но не таким красивым. Из этого следует вывод, что любую задачу можно решить несколькими способами и программист должен уметь выбрать оптимальное решение.

Многомерные массивы

В языке Java многомерные массивы представляют собой массивы массивов. Самый распространённый вид многомерных массивов — двумерные массивы.

Рассмотрим пример объявления такого массива:

int[][] a = new int[5][5];

В данном примере был проинициализирован двумерный массив a размером 5 на 5, который можно представить ввиде таблицы:

Массивы

Как и все языки программирования, Java содержит набор коллекций, изучение которых, по традиции, начнём с массивов. Массивы в программировании напоминают жилые массивы, с нумерацией домов.

Массив представляет набор однотипных значений. Объявление массива похоже на объявление обычной переменной, но отличается использованием прямоугольных скобок.

Для объявления массива есть два способа:

Массивы: объявление

Например, определение массива для целых чисел:

Способы определения массивов

Массив, как и переменная, требует инициализации:

Массивы как ссылочный тип данных

Массив – ссылочный тип данных.

new — ключевое слово, выделяющее память для указанного в скобках количества элементов, а имя ссылается на ту часть памяти, с которой начинают располагаться эти элементы.

Выделение памяти под массив в Java

это массив из четырех элементов типа int, и каждый элемент будет иметь значение по умолчанию — число 0.

Для числовых типов (в том числе для типа char) это число 0, для типа boolean это значение false, а для остальных объектов это значение null.

Можно объявлять и инициализировать одновременно:

Одновременное объявление и инициализация массивов

Можно объявлять массив и сразу заполнять его нужными значениями (оба способа верны):

Массивы с заполнением значениями

Размер массива, при таком способе, вычисляется по количеству элементов в фигурных скобках.

После создания массива можно обращаться к элементу по индексу — порядковый номер элемента, отсчёт которого начинается с нуля:

int[] nums = < 1, 2, 3, 5 >; // начальные значения // устанавливаем новые значения элементов nums[0] = 6; // 1-й элемент nums[1] = 4; // 2-й элемент nums[2] = 6; // 3-й элемент nums[3] = 8; // 4-й элемент // т.к. массив – изменяемый тип данных // а теперь получаем значение 3-его элемента System.out.println(nums[2]); // 6 

Массивы: индексы и границы

Одна из распространённых ошибок по работе с массивом – обращение по несуществующему индексу:

int[] nums = < 1, 2, 3, 5 >; // начальные значения // у массива 4 значения, индексы: 0, 1, 2, 3 System.out.println(nums[2]); // 3 System.out.println(nums[4]); // ошибка // значения по индексу 4 не существует 

Ошибка возникла из-за того, что память была выделена под четыре элемента. Поэтому обратиться к 5-му нельзя.

По адресу 5-го элемента могут находиться важные данные и подобный подход защищает их.

Можно ли определить длину массива? Для этого существует свойство length. Оно возвращает число элементов:

Длина массива

Когда бывает неизвестным последний индекс, то для его получения можно использовать это свойство:

int last = nums[nums.length - 1]; 

Массивы и циклы

Пример кода, объединяющего массивы и циклы:

public static void main(String[] args) < final int size = 5; // размер массива // инициализация массива размером size int array[] = new int[size]; int counter = 0; // объявляем и обнуляем счётчик // заполняем массив случайными значениями // с помощью цикла while while (counter < size) < int rnum = (int) (Math.random() * 10); array[counter] = rnum; counter++; // инкремент счётчика >// end while // мы не знаем какие числа попали в массив, // поэтому выведем их циклом for for (counter = 0; counter < size; counter++) < System.out.printf("Element #%d in array = %d\n", counter + 1, array[counter]); >// end for > // end main 

Вот и настал момент ознакомиться с ещё одним циклом. Это for-each.

For-each — это разновидность цикла for, которая используется, когда нужно обработать все элементы массива или коллекции. “For each” с английского так и переводится — “для каждого”.

Cамо словосочетание for each в этом цикле не используется. Его синтаксис следующий:

Синтаксис foreach Java

  • type — тип итерационной переменной (совпадает с типом данных в массиве!);
  • itVar — её имя;
  • array — массив.

Немного изменим предыдущий код, используя for-each:

public static void main(String[] args) < final int size = 5; // размер массива // инициализация массива размером size int array[] = new int[size]; // заполняем массив случайными значениями циклом for for (int counter = 0; counter < size; counter ++) < int rnum = (int) (Math.random() * 10); array[counter] = rnum; >// end for System.out.printf("Array of %d values: [ ", size); // выведем случайные значения циклом for-each for (int item : array) < System.out.printf("%d ", item); >// end for-each System.out.println("]"); > // end main 

При необходимости, размер массива после стартовой инициализации, можно поменять (resize):

public static void main(String[] args) < int[] numberArray = < 12, 24, 63, 45 >; // массив из 4 элементов System.out.println("Array before ReSize: "); for (int item: numberArray) < System.out.println(item); >// end for-each int[] temp = new int[6]; // выделяем память под 6 элементов for (int i = 0; i < numberArray.length; i++) < temp[j] = numberArray[j]; // поэлементное присвоение >// существующих значений numberArray = temp; // переприсвоение System.out.println("Array after ReSize: "); for (int item: numberArray) < System.out.println(item); >// end for-each > // end main 

Найдем теперь минимальное значение в массиве. Чтобы код заработал в импортах добавляем import java.util.Arrays;

final int size = 5; // размер массива int array[] = new int[size]; int minValue = Integer.MAX_VALUE; // тут будет минимум for (int counter = 0; counter < size; counter ++) < int rnum = (int) (Math.random() * 10); array[counter] = rnum; >// end for System.out.println("Array: " + Arrays.toString(array)); // найдём минимальное значения массива циклом for-each System.out.print("Min value: "); for (int item : array) < if(item < minValue) minValue = item; >// end for-each System.out.println(minValue); 

Для поиска максимального значения код немного дорабатывается. Чтобы код заработал в импортах добавляем import java.util.Arrays;

final int size = 5; // размер массива int array[] = new int[size]; int maxValue = Integer.MIN_VALUE; // тут будет максимум for (int counter = 0; counter < size; counter ++) < int rnum = (int) (Math.random() * 10); array[counter] = rnum; >// end for System.out.println("Array: " + Arrays.toString(array)); // найдём минимальное значения массива циклом for-each System.out.print("Max value: "); for (int item : array) < if (item >maxValue) < maxValue = item; >> // end for-each System.out.println(maxValue); 

Среднее арифметическое находится как сумма элементов массива, делённая на их число. Чтобы код заработал в импортах добавляем import java.util.Arrays;

final int size = 5; // число элементов массива int array[] = new int[size]; double average = 0; // тут будет среднее арифметическое double sum = 0; // тут будет сумма значений массива for (int counter = 0; counter < size; counter ++) < int rnum = (int) (Math.random() * 10); array[counter] = rnum; >// end for System.out.println("Array: " + Arrays.toString(array)); // найдём сумму значений массива циклом for-each System.out.print("Average value: "); for (int item : array) < sum += item; >// end for-each average = sum / size; // среднее арифметические System.out.println(average); 

Строка – это тоже массив символов, но код:

Ошибка при обращении к индексу строки

array required, but java.lang.String found
(требуется массив, а найдена строка)

Строки будут изучаться позднее, но важно знать, что строка, хотя и является массивом символов, но работа с ней отличается.

Правильным подходом является использование метода:

charAt(index)

Вот пример кода работы со строкой:

public static void main(String[] args) < String word = "Hello"; // Вывод второго символа слова Hello System.out.printf("Second letter of Hello ->%s\n\n", word.charAt(1)); // Преобразуем строку в массив символов var array = word.toCharArray(); // Выводим элементы массива циклом for-each for (char symbol : array) < System.out.println(symbol); >// end for-each > // end main 

Массивы бывают не только линейными (строчными, одномерными), но и многомерными. Например двумерный массив — матрица (таблица) — будет рассмотрен в следующем разделе.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *