dp-Caspik / Задачи на JavaRush.ru
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| /* 2 массива |
| 1. Создать массив на 10 строк. |
| 2. Создать массив на 10 чисел. |
| 3. Ввести с клавиатуры 10 строк, заполнить ими массив строк. |
| 4. В каждую ячейку массива чисел записать длину строки из массива строк, индекс ячейки которой совпадает с текущим индексом из массива чисел. Вывести содержимое массива чисел на экран, каждое значение выводить с новой строки. |
| */ |
| import java . io . BufferedReader ; |
| import java . io . InputStreamReader ; |
| public class Solution |
| public static void main ( String [ ] args ) throws Exception |
| String [ ] letters = new String [ 10 ] ; |
| int [ ] numbers = new int [ 10 ] ; |
| BufferedReader reader = new BufferedReader ( new InputStreamReader ( System . in ) ) ; |
| for ( int i = 0 ; i < letters . length ; i ++ ) |
| letters [ i ] = reader . readLine ( ) ; |
| for ( int i = 0 ; i < numbers . length ; i ++ ) |
| numbers [ i ] = letters [ i ] . length ( ) ; |
| for ( int i = 0 ; i < numbers . length ; i ++ ) |
| System . out . println ( numbers [ i ] ) ; |
| > |
| > |
Как ввести массив в java с клавиатуры
Массив представляет набор однотипных значений. Объявление массива похоже на объявление обычной переменной, которая хранит одиночное значение, причем есть два способа объявления массива:
тип_данных название_массива[]; // либо тип_данных[] название_массива;
Например, определим массив чисел:
int nums[]; int[] nums2;
После объявления массива мы можем инициализовать его:
int nums[]; nums = new int[4]; // массив из 4 чисел
Создание массива производится с помощью следующей конструкции: new тип_данных[количество_элементов] , где new — ключевое слово, выделяющее память для указанного в скобках количества элементов. Например, nums = new int[4]; — в этом выражении создается массив из четырех элементов int, и каждый элемент будет иметь значение по умолчанию — число 0.
Также можно сразу при объявлении массива инициализировать его:
int nums[] = new int[4]; // массив из 4 чисел int[] nums2 = new int[5]; // массив из 5 чисел
При подобной инициализации все элементы массива имеют значение по умолчанию. Для числовых типов (в том числе для типа char) это число 0, для типа boolean это значение false , а для остальных объектов это значение null . Например, для типа int значением по умолчанию является число 0, поэтому выше определенный массив nums будет состоять из четырех нулей.
Однако также можно задать конкретные значения для элементов массива при его создании:
// эти два способа равноценны int[] nums = new int[] < 1, 2, 3, 5 >; int[] nums2 = < 1, 2, 3, 5 >;
Стоит отметить, что в этом случае в квадратных скобках не указывается размер массива, так как он вычисляется по количеству элементов в фигурных скобках.
После создания массива мы можем обратиться к любому его элементу по индексу, который передается в квадратных скобках после названия переменной массива:
int[] nums = new int[4]; // устанавливаем значения элементов массива nums[0] = 1; nums[1] = 2; nums[2] = 4; nums[3] = 100; // получаем значение третьего элемента массива System.out.println(nums[2]); // 4
Индексация элементов массива начинается с 0, поэтому в данном случае, чтобы обратиться к четвертому элементу в массиве, нам надо использовать выражение nums[3] .
И так как у нас массив определен только для 4 элементов, то мы не можем обратиться, например, к шестому элементу: nums[5] = 5; . Если мы так попытаемся сделать, то мы получим ошибку.
Длина массива
Важнейшее свойство, которым обладают массивы, является свойство length , возвращающее длину массива, то есть количество его элементов:
int[] nums = ; int length = nums.length; // 5
Нередко бывает неизвестным последний индекс, и чтобы получить последний элемент массива, мы можем использовать это свойство:
int last = nums[nums.length-1];
Многомерные массивы
Ранее мы рассматривали одномерные массивы, которые можно представить как цепочку или строку однотипных значений. Но кроме одномерных массивов также бывают и многомерными. Наиболее известный многомерный массив — таблица, представляющая двухмерный массив:
int[] nums1 = new int[] < 0, 1, 2, 3, 4, 5 >; int[][] nums2 = < < 0, 1, 2 >, < 3, 4, 5 >>;
Визуально оба массива можно представить следующим образом:
Как ввести массив в java с клавиатуры
Начавшаяся в конце 20 века компьютерная революция привела в середине 90-х годов к созданию интернета (веба). И это было началом еще большей революции. Эффект от появления интернета сопоставим с эффектом индустриализации. Но самое вкусное в том, что этот процесс еще находится в самом начале.
Количество сайтов превышает 200 миллионов. Пользователей интернета – 3 миллиарда. Интернет-аукционы, интернет-сайты, интернет-магазины, интернет-услуги. ИТ-экономика растет на 20%-30% ежегодно. Это чудовищные темпы. Но они все не падают и не падают.
За последние 10 лет в Силиконовой Долине (центр ИТ-мира), каждые 2 месяца основывалась компания, впоследствии стоящая миллиард долларов. И это не говоря уже о таких звездах интернета, как Facebook ($220 миллиардов), Amazon ($140 миллиардов) и Google ($350 миллиардов). Все эти компании не появились бы, если бы не было интернета.
Все это приводит к высокому спросу на ИТ-специалистов. Мировой ИТ-экономике требуются: программисты, дизайнеры, тестировщики, архитекторы, менеджера, системные администраторы и другие специалисты.
Хорошо быть айтишником

Если вы ИТ-специалист, то для вас настало золотое время. Вы можете работать на западную компанию, а жить – в небольшом городе или вообще в другой стране. Доходы будут, конечно, меньше чем на западе (обычно раза в два), но выше, чем на местном рынке труда (в 3-10 раз). Чем меньше ваш город, тем заметней разница.
Вы будете получать ценный опыт работы, хорошие деньги и блестящие перспективы. Иногда будете ездить в командировки в офис к работодателю. А если вам там очень понравится, можете туда и переехать.
Прилив поднимает все лодки. Но почему бы вам не оказаться той лодкой, которая находится в нужное время и в нужном месте? Это тоже надо уметь.
Перспективы иммиграции
На западе ИТ-специалисты входят в тройку самых высокооплачиваемых профессий наряду с врачами и юристами. Средние зарплаты программистов около $90 тысяч/год. Но самое интересное в том, что ИТ-профессии отлично подходят для глобального рынка труда.
Что будет, если врач захочет сменить страну? Другая страна – другие медицинские стандарты. С дипломом его страны работать в новой скорее всего не дадут. Придется выучить язык, заново сдать экзамены, пройти практику – долгий путь.
У юристов все еще хуже. В одной стране одни законы, в другой — другие. Тут главнее связи, там — прецедентное право. От хороших юристов из одного места будет мало толку в другом.
ИТ-специалисты. Очень часто напрямую или через посредников работают на крупные западные компании. Те же технологии, те же бизнес-процессы. Вся документация в интернете на английском. Резюме – на английском. Можно переехать в любую страну мира и ничего не поменяется. Даже заказчики/работодатели часто одни и те же.
А зарплаты айтишников в Калифорнии ох как хороши. Вот зачем нужно все время развиваться.
Лучший способ мотивировать себя что-то учить — это заплатить за это деньги. Жадность банально сильнее лени.
Побороть лень — купить подписку
1. Массивы, null
— День добрый, Элли!
— Сегодня я расскажу тебе о новой интересной сущности – о массивах. Массив – это специальный тип данных, который может хранить не одно значение, а несколько.
— Начну с аналогии. Давай сравним обычный жилой дом и многоэтажку. В обычном доме чаще всего живет одна семья, а многоэтажка разбита на квартиры. Чтобы написать письмо семье, которая живет в обычном доме, надо указать его уникальный адрес. А чтобы написать письмо семье, которая живет в квартире, надо указать уникальный адрес дома и еще номер квартиры.
— Да, тут все понятно.
— Так вот, переменная-массив – это переменная-многоэтажка. В ней можно хранить не одно значение, а несколько. В такой переменной есть несколько квартир (ячеек), к каждой из которых можно обратиться по ее номеру (индексу). Для этого после имени переменной в квадратных скобках надо указать индекс ячейки, к которой обращаемся. Это довольно просто.
— Переменная-многоэтажка (переменная-массив) может быть любого типа, надо лишь вместо «TypeName имя_переменной», написать «TypeName[] имя_переменной».
for (int i = 0; i < list.length; i++) < System.out.println(list[i]); >
— Переменная-массив требует дополнительной инициализации.
— Обычную переменную нужно было просто объявить и уже можно присваивать ей различные значения. С массивом все немного сложнее.
— Сначала надо создать контейнер на N элементов, а затем в него уже можно класть значения.
| Код | Пояснение |
|---|---|
| String[] list = null; | Переменная-массив list , ее значение – null. Она может хранить только контейнер для элементов. Контейнер надо создавать отдельно. |
| String[] list = new String[ 5 ]; | Мы создаем контейнер на 5 элементов и кладем ссылку на него в переменную list . Этот контейнер содержит 5 квартир (ячеек) с номерами 0, 1, 2, 3, 4. |
| String[] list = new String[ 1 ]; | Мы создаем контейнер на 1 элемент и кладем ссылку на него в переменную list . Чтобы занести что-то в этот контейнер надо написать list [0] = “Yo!” ; |
| String[] list = new String[ 0 ]; | Мы создаем контейнер на 0 элементов и кладем ссылку на него в переменную list . Ничего в этот контейнер занести нельзя! |
— Ага. Кое-что проясняется.
— Основные факты о массивах:
1) Массив состоит из множества ячеек.
2) Доступ к конкретной ячейке идёт через указание её номера.
3) Все ячейки одного типа.
4) Начальное значение для всех ячеек – null, для примитивных типов – 0, 0.0 (для дробных), false (для типа boolean). Точно такое же, как и у простых неинициализированных переменных.
5) String[] list — это просто объявление переменной. Сначала нужно создать массив (контейнер) и положить его в эту переменную, а потом уже им пользоваться. См. пример ниже.
6) Когда мы создаём объект массив (контейнер), нужно указать, какой он длины – сколько в нем ячеек. Это делается командой вида: new TypeName[n];
2. Особенность устройства массивов в памяти
— Привет, Амиго! Давай я покажу тебе, как это все работает в памяти:

— А что это ещё за 345?
— Вообще-то я взял его с потолка, но, по идее, это адрес строки, содержащей слово «Мама».
— С массивами все немного сложнее:

— 155,166,177 – это тоже взятые с потолка числа, символизирующие адреса строк справа?
— Ага. Хорошо, что ты сам догадался. Обрати внимание, тут присутствует дополнительный объект – массив из 10 ячеек.
— Все ясно и понятно, спасибо. Действительно, лучше один раз увидеть. Спасибо, Риша.
3. Примеры использования массивов Array
— Хочу дать тебе несколько примеров, что интересного можно делать с массивами:
public class MainClass < public static void main(String[] args) < int[] numbers = new int[10]; for (int i = 0; i < numbers.length; i++) < numbers[i] = i + 1; > > >
public class MainClass < public static void main(String[] args) < int[] numbers = new int[10]; for (int i = 0; i < numbers.length; i++) < numbers[i] = 10 - i; > > >
public class MainClass < public static void main(String[] args) < int[] numbers = new int[10]; for (int i = 0; i < numbers.length; i++) < numbers[i] = i; > > >
public class MainClass < public static void main(String[] args) < int[] numbers = new int[10]; for (int i = 0; i < numbers.length; i++) < numbers[i] = 9 - i; > > >
public class MainClass < public static void main(String[] args) throws IOException < BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String[] list = new String[10]; for (int i = 0; i < list.length; i++) < list[i] = reader.readLine(); > > >
public class MainClass < public static void main(String[] args) throws IOException < BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); int[] list = new int[10]; for (int i = 0; i < list.length; i++) < String s = reader.readLine(); list[i] = Integer.parseInt(s); > > >
public class MainClass < public static void main(String[] args) throws IOException < int[] list = new int[10]; //заполнение массива for (int i = 0; i < list.length; i++) list[i] = i; //вывод на экран for (int i = 0; i < list.length; i++) System.out.println(list[i]); > >
public class MainClass < public static void main(String[] args) throws IOException < //это статическая инициализация int[] list = ; //подсчёт суммы элементов int sum = 0; for (int i = 0; i < list.length; i++) sum += list[i]; System.out.println("Sum is " + sum); > >
public class MainClass < public static void main(String[] args) throws IOException < int[] list = ; int min = list[0]; for (int i = 1; i < list.length; i++) < if (list[i] < min) min = list[i]; > System.out.println ("Min is " + min); > >
4. Задачи на создание и использование массивов
— Привет, Амиго! Вот тебе пара задачек, дружище:
5. ArrayList, отличие от Array
— Сегодня новая интересная тема! Сейчас я расскажу тебе о новом интересном классе – ArrayList .
— О, новый класс? Круто! И что он умеет делать?
— Начну с небольшой предыстории. Программистам очень не нравилось одно свойство массива – его размер нельзя изменять. Что делать, если нужно сохранить в массиве ещё три элемента, а свободное место только одно?
— Единственным решением проблемы нехватки места в массиве было создание массива очень большого размера, чтобы все элементы туда точно поместились. Но это часто приводило к нерациональному расходу памяти. Если чаще всего в массиве хранилось три элемента, но был хотя бы мизерный шанс, что там их будет 100, приходилось создавать массив на 100 элементов.
— И что же придумали программисты?
— Они написали класс ArrayList , который выполнял ту же работу, что и Array (массив), но мог изменять свой размер.
— Интересный ход. И как же они это сделали?
— Внутри каждого объекта типа ArrayList хранится обычный массив элементов. Когда ты считываешь элементы из ArrayList , он считывает их из своего внутреннего массива. Когда записываешь – записывает их во внутренний массив. Вот сравни:
| Array | ArrayList |
|---|---|
| Создание контейнера элементов | |
| String [] list = new String [10]; | ArrayList < String >list = new ArrayList< String >(); |
| Получение количества элементов | |
| int n = list .length; | int n = list .size(); |
| Взятие элемента из массива/коллекции | |
| String s = list [ 3 ]; | String s = list .get( 3 ); |
| Запись элемента в массив | |
| list [ 3 ] = s; | list .set( 3 , s); |
— И в чем же преимущество ArrayList? Как по мне, так код стал длиннее.
— Во-первых, ArrayList поддерживает несколько дополнительных действий, которые очень часто приходится делать программистам во время работы, и которых нет у массива. Например – вставка и удаление элементов из середины массива, и чтобы не оставалось дырок.
— Во-вторых, изменение размера : когда нужно записать во внутренний массив ещё один элемент, а свободного места там нет, то внутри ArrayList делается вот что:
а) создаётся ещё один массив, вдвое большего размера.
б) все элементы из старого массива копируются в новый массив.
в) новый массив сохраняется во внутренней переменной объекта ArrayList, старый массив объявляется мусором (мы просто перестаём хранить на него ссылку).
| Array | ArrayList |
|---|---|
| Добавление элемента в конец массива | |
| Невозможно выполнить данное действие | list .add(s); |
| Вставка элемента в середину массива | |
| Невозможно выполнить данное действие | list .add(15, s); |
| Вставка элемента в начало массива | |
| Невозможно выполнить данное действие | list .add(0, s); |
| Удаление элемента из массива | |
| Можно стереть элемент с помощью list [3] = null. Но тогда останется «дыра» в массиве. | list .remove(3); |
— А как работать с этим ArrayList’ом?
— А практически так же, как и с массивом. Вот смотри. Давай сравним работу с ArrayList с работой с массивом. Для примера решим такую задачу « ввести 10 строк с клавиатуры и вывести их на экран в обратном порядке » .
public static void main(String[] args) < Reader r = new InputStreamReader(System.in); BufferedReader reader = new BufferedReader(r); //ввод строк с клавиатуры String[] list = new String[10]; for (int i = 0; i < list.length; i++) < String s = reader.readLine(); list[i] = s; > //вывод содержимого массива на экран for (int i = 0; i < list.length; i++) < int j = list.length - i - 1; System.out.println( list[j] ); > >
public static void main(String[] args) < Reader r = new InputStreamReader(System.in); BufferedReader reader = new BufferedReader(r); //ввод строк с клавиатуры ArrayList list = new ArrayList(); for (int i = 0; i < 10; i++) < String s = reader.readLine(); list.add(s); > //вывод содержимого коллекции на экран for (int i = 0; i < list.size(); i++) < int j = list.size() - i - 1; System.out.println( list.get(j) ); > >
— Я раскрасил одним цветом эквивалентные действия в обеих колонках.
— С одной стороны все по-другому, с другой – все осталось тем же самым.
— Ага. Только мы теперь не используем квадратные скобочки при работе с ArrayList. Вместо них мы используем методы get, set и add.
— Да, я уже заметил. Но все равно очень похоже.
6. Задачи по ArrayList
— Ты опять ничего не делаешь? Ты же робот! Роботы все время чем-то заняты. Вот тебе пара задачек, чтобы ты не расслаблялся. Но для начала – пара подсказок:
— Подсказка 1:
Список (анг. List), чаще всего под этим словом подразумевается ArrayList.
— Подсказка 2:
Строка (анг. String), под этим подразумевается тип String.
— Подсказка 3:
Создать список строк чаще всего означает: ArrayList list = new ArrayList();
7. Generics
— И ещё одна крутая тема.
— Одни сюрпризы. Прямо не день, а день рождения.
— Сегодня я расскажу тебе, что такое Generics. “Дженерики” – это типы с параметром. В Java классы-контейнеры позволяют указывать тип их внутренних объектов.
— Когда мы объявляем generic-переменную, то мы указываем не один тип, а два: тип переменной и тип данных, которые она у себя хранит.
Хороший пример этого – ArrayList. Когда мы создаём новый объект/переменную типа ArrayList, нам удобно указать, значения какого типа будут храниться внутри этого списка.
— Звучит очень интересно. Особенно про любой тип .
— Это только кажется, что это хорошо. На самом деле, если в одном методе в ArrayList кладутся строки, а в другом мы работаем с его содержимым и ожидаем, что там будут только числа, программа упадет (закроется с ошибкой).
— Пока что мы не будем создавать свои классы с типами-параметрами, но будем использовать чужие.
— А в качестве типа-параметра можно поставить любой класс, даже тот, что напишу я?
— Да, любой тип, кроме примитивных типов. Все классы-параметры должны быть унаследованы от класса Object.
— Т.е. я не могу написать ArrayList ?
— В общем-то, да, не можешь. Но для примитивных типов разработчики языка Java написали их непримитивные аналоги — классы, унаследованные от Object. Вот как это будет выглядеть:
| Примитивный тип | Класс | Список |
|---|---|---|
| int | Integer | ArrayList |
| double | Double | ArrayList |
| boolean | Boolean | ArrayList |
| char | Character | ArrayList |
| byte | Byte | ArrayList |
— Примитивные типы и их классы-аналоги (классы-обёртки) можно спокойно присваивать друг другу:
| Примеры |
|---|
| int a = 5; Integer b = a; int c = b; |
| Character c = ‘c’; //литерал ‘c’ имеет тип char char d = c; |
| Byte b = ( byte ) 77; //литерал 77 имеет тип int |
| Boolean isOk = true; //литерал true имеет тип boolean |
| Double d = 1.0d; //литерал 1.0d имеет тип double |
— Отлично. Тогда я думаю, я буду почаще использовать ArrayList.
8. Примеры по ArrayList и Generics
— Давай-ка я начну с действительно полезных вещей. Сейчас ты увидишь несколько полезных примеров работы с ArrayList и Generics:
public static void main(String[] args) throws IOException < BufferedReader reader = new BufferedReader(new InputStreamReader(System.in) ); ArrayListInteger> list = new ArrayListInteger>(); while (true) < String s = reader.readLine(); if (s.isEmpty()) break; list.add(Integer.parseInt(s)); > >
public static void main(String[] args) throws IOException < BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); ArrayListInteger> list = new ArrayListInteger>(); while (true) < String s = reader.readLine(); if (s.isEmpty()) break; int x = Integer.parseInt(s); if (x % 2 == 0) //проверяем, что остаток от деления на два равен нулю list.add(x); //добавление в конец else list.add(0, x); //вставка в начало > >
public static void main(String[] args) throws IOException < BufferedReader reader = new BufferedReader(new InputStreamReader(System.in) ); ArrayListInteger> list = new ArrayListInteger>(); list.add(1); list.add(7); list.add(11); list.add(3); list.add(15); for (int i = 0; i < list.size(); ) //убрали увеличение i внутрь цикла < if (list.get(i) > 5) list.remove(i); //не увеличиваем i, если удалили текущий элемент else i++; > >
public static void main(String[] args) throws IOException < //статическая инициализация массива int[] data = ; //создание списка, где все элементы должны быть типа Integer ArrayList list = new ArrayList(); //заполнение списка из массива for (int i = 0; i < data.length; i++) list.add(data[i]); ArrayList even = new ArrayList(); //чётные ArrayList odd = new ArrayList(); //нечётные for (int i = 0; i < list.size(); i++) < Integer x = list.get(i); if (x % 2 == 0) //если x - чётное even.add(x); // добавляем x в коллекцию четных чисел else odd.add(x); // добавляем x в коллекцию нечетных чисел > >
public static void main(String[] args) throws IOException < ArrayListInteger> list1 = new ArrayListInteger>(); //создание списка Collections.addAll(list1, 1, 5, 6, 11, 3, 15, 7, 8); //заполнение списка ArrayListInteger> list2 = new ArrayListInteger>(); Collections.addAll(list2, 1, 8, 6, 21, 53, 5, 67, 18); ArrayListInteger> result = new ArrayListInteger>(); result.addAll(list1); //добавление всех значений из одного списка в другой result.addAll(list2); for (Integer x : result) //быстрый for по всем элементам, только для коллекций < System.out.println(x); > >
— Круто. И что Диего даст мне сейчас кучу аналогичных задач, да?
9. Задачи по List
— Наконец-то ты освободился. Устал уже держать в уме твои задачи. Вот тебе ещё парочка, чтобы не расслаблялся:
1. Создай список слов, заполни его самостоятельно.
2. Метод fix() должен:
2.1. удалять из списка строк все слова, содержащие букву «р»
2.2. удваивать все слова содержащие букву «л».
2.3. если слово содержит и букву «р» и букву «л», то оставить это слово без изменений.
2.4. с другими словами ничего не делать.
10. Лекция по массивам и спискам
— Я нашёл мои “замечательные” лекции! Так что сегодня ты станешь обладателем “ценнейшего знания” по массивам и спискам. Вот они:
11. Хулио
— Привет, Амиго! Рад, что ты со всем этим справился – ты заслужил награду:
12. Капитан
— Здравия желаю, капитан Бобров!
— У меня для тебя шикарная новость. Вот тебе задания для закрепления полученных навыков. Выполняй их каждый день, и твои навыки будут расти с неимоверной скоростью. Они специально разработаны для выполнения их в Intellij IDEA.
Создай класс Human с полями имя( String ), пол( boolean ), возраст( int ), отец( Human ), мать( Human ). Создай объекты и заполни их так, чтобы получилось: Два дедушки, две бабушки, отец, мать, трое детей. Вывести объекты на экран.
Примечание:
Если написать свой метод String toString() в классе Human , то именно он будет использоваться при выводе объекта на экран.
— Те задания были для духов. Для дедушек я добавил бонусные задания повышенной сложности. Только для старослужащих.
Задача: Программа вводит с клавиатуры данные про котов и выводит их на экран.
Задача: Программа вводит строки, пока пользователь не введёт пустую строку (нажав enter). Потом она конвертирует строки в верхний регистр (Мама превращается в МАМА) и выводит их на экран.
Новая задача: Программа вводит строки, пока пользователь не введёт пустую строку (нажав enter). Потом программа строит новый список. Если в строке чётное число букв, строка удваивается, если нечётное – утраивается. Программа выводит содержимое нового списка на экран.
Как ввести массив в java с клавиатуры

Руководство по массивам
Руководство по массивам в Java
Введение
Для хранения данных, используемых при работе программы, применяются переменные того или иного типа. Например, если требуется сохранить имя игрока, то создается переменная String name, если целочисленное значение, то int number и т. д. Когда таких значений немного или их количество заранее известно, то для них приемлемо использовать отдельные переменные.
Но что делать, когда в программе задействовано не одно, а 10 чисел, или их количество становится известно только на этапе запуска приложения, когда пользователь вводит его с клавиатуры? Или в какой-то игре может участвовать разное количество игроков, устанавливаемое при ее старте. В таких ситуациях отдельными переменными уже не обойтись, т. к. их точное количество будет невозможно определить. Да и, если все же попытаться это сделать, код станет громоздким и не универсальным, а работа с ним будет крайне ограниченной из-за невозможности использования цикла для автоматизированной обработки данных.
Вот тут-то и приходит на выручку такая структура данных как массив, которая позволяет хранить в себе значения одного типа, что значительно упрощает их обработку.
