С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 25.01.2016
Сообщений: 2
.NET 4.x

Исключение "индекс находился вне границ массива" при заполнении массива значением

23.08.2016, 20:09. Показов 2788. Ответов 3

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток, делаю курсовую на языке программирования C#.

Задача:
В (0, 1)-матрице подсчитать число изолированных 0-областей, т.е. областей, состоящих из одних нулей, 0-область может состоять только из одного нулевого элемента. Пользователь вводит с клавиатуры размерность матрицы и значения элементов матрицы. Программа определяет количество изолированных 0-областей в матрице.

Проблема:
После ввода переменных и обозначения размера массива, пытаюсь заполнить массив данными, но выбивает с исключением System.IndexOutOfRangeException. Помогите разобраться, не могу понять что я делаю не так.

C#
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
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int number_line = 0;                    //Число строк в матрице
            int number_column = 0;          //Число столбцов в матрице
            int number_zero = 0;                //Количество нулевых элементов
            int number_x = 0;                   //Номер нулевой зоны
            int number_y = 0;                   //Количество нулевых зон
            int k = 0;                      //Номер нулевого элемента в массиве
            int max = 0;                            //Номер максимальной зоны
            int[,] mas = new int[number_line, number_column];   //Создание массива для хранения матрицы
            int[,] koordinat = new int[number_zero, 2];                 //Создание массива с "координатами" нулевых элементов
            int[,] number_zone = new int[1, number_zero];              //Создание массива с номерами нулевых зон
 
            //Сообщение о вводе количества строк матрицы
            Console.WriteLine("Введите количество строк матрицы и нажмите <Enter> =>");
            //Ввод количества строк матрицы с клавиатуры
            number_line = Convert.ToInt16(Console.ReadLine());
            //Сообщение о вводе количества столбцов матрицы
            Console.WriteLine("Введите количество столбцов матрицы и нажмите <Enter> =>");
            //Ввод количества столбцов матрицы с клавиатуры
            number_column = Convert.ToInt16(Console.ReadLine());
            //Цикл ввода матрицы с клавиатуры
            for (int i = 0; i < number_line; i++)
            {
                for (int j = 0; j < number_column; j++)
                {
                    Console.WriteLine("Введите значение элемента матрицы ({0},{1}) \t", i, j);
                    mas[i, j] = Convert.ToInt32(Console.ReadLine());
                }
                Console.WriteLine();
            }
        }
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.08.2016, 20:09
Ответы с готовыми решениями:

Исключение "индекс находился вне границ массива" при попытке проверить строку string
Помогите, пожалуйста. Проблема возникает во всех случаях (строки 21, 25, 34, 36 и 38). string Strings =...

Индекс находился вне границ массива при вызове args
Написал вот такой код: static void Main(string args) { var Path = args; var Filter = args; ...

Индекс находился вне границ массива при работе с массивами
Добрый вечер! Застрял на такой вот замечательной ошибке...Подскажите, где накасячил! using System; using System.Collections.Generic;...

3
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
23.08.2016, 20:17
Цитата Сообщение от meshchaninov Посмотреть сообщение
C#
1
int number_line = 0;
C#
1
 int number_column = 0;
Цитата Сообщение от meshchaninov Посмотреть сообщение
C#
1
int[,] mas = new int[number_line, number_column];
Что не так?
Массив как массив 0 на 0.
Массив объявлен до изменения
C#
1
2
int number_line = 0;
 int number_column = 0;
1
0 / 0 / 0
Регистрация: 25.01.2016
Сообщений: 2
23.08.2016, 20:46  [ТС]
EveKS, значения присваиваю чтобы проверить выполнение программы при массиве больше 0, так как программа не компилируется для проверки при неприсвоенном значении переменной и просит его присвоить.

Добавлено через 11 минут
EveKS, за пределы чего я выходил теперь понял) Спасибо что указали на ошибку. Правда не понимаю почему после присвоения новых значений он не менял размер массива, хоть я делал проверку на заполнение переменных новыми данными и они в них записываются, значит размер массива должен был меняться.

Добавлено через 6 минут
EveKS, Видимо изначально при компиляции задаётся максимальный размер массива который берётся из переменных, а дальше при вводе его размера, он его уже создаёт и заполняет, но я всё равно не могу выйти за пределы максимального размера массива который я указывал в переменных когда их объявлял, так как не объявлять я их тоже не могу так как они не могут быть пустыми. Хотя странно ведь можно объявить переменные и заполнить их позже... Вроде уже встречался с этим.
0
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
23.08.2016, 21:32
Лучший ответ Сообщение было отмечено meshchaninov как решение

Решение

Цитата Сообщение от meshchaninov Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static void Main(string[] args) {
 int number_line = 0; //Число строк в матрице
 int number_column = 0; //Число столбцов в матрице
 int number_zero = 0; //Количество нулевых элементов
 int number_x = 0; //Номер нулевой зоны
 int number_y = 0; //Количество нулевых зон
 int k = 0; //Номер нулевого элемента в массиве
 int max = 0; //Номер максимальной зоны
 int[,] mas = new int[number_line, number_column]; //Создание массива для хранения матрицы
 int[,] koordinat = new int[number_zero, 2]; //Создание массива с "координатами" нулевых элементов
 int[,] number_zone = new int[1, number_zero]; //Создание массива с номерами нулевых зон
 //Сообщение о вводе количества строк матрицы
 Console.WriteLine("Введите количество строк матрицы и нажмите <Enter> =>");
 //Ввод количества строк матрицы с клавиатуры
 number_line = Convert.ToInt16(Console.ReadLine());
 //Сообщение о вводе количества столбцов матрицы
 Console.WriteLine("Введите количество столбцов матрицы и нажмите <Enter> =>");
 //Ввод количества столбцов матрицы с клавиатуры
 number_column = Convert.ToInt16(Console.ReadLine());
 //Цикл ввода матрицы с клавиатуры
 for (int i = 0; i < number_line; i++)[
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
static void Main(string[] args) {
 int number_line = 0; //Число строк в матрице
 int number_column = 0; //Число столбцов в матрице
 int number_zero = 0; //Количество нулевых элементов
 int number_x = 0; //Номер нулевой зоны
 int number_y = 0; //Количество нулевых зон
 int k = 0; //Номер нулевого элемента в массиве
 int max = 0; //Номер максимальной зоны
 //Сообщение о вводе количества строк матрицы
 Console.WriteLine("Введите количество строк матрицы и нажмите <Enter> =>");
 //Ввод количества строк матрицы с клавиатуры
 number_line = Convert.ToInt16(Console.ReadLine());
 //Сообщение о вводе количества столбцов матрицы
 Console.WriteLine("Введите количество столбцов матрицы и нажмите <Enter> =>");
 //Ввод количества столбцов матрицы с клавиатуры
 number_column = Convert.ToInt16(Console.ReadLine());
 
 
 
 int[,] mas = new int[number_line, number_column]; //Создание массива для хранения матрицы
 int[,] koordinat = new int[number_zero, 2]; //Создание массива с "координатами" нулевых элементов
 int[,] number_zone = new int[1, number_zero]; //Создание массива с номерами нулевых зон
 //Цикл ввода матрицы с клавиатуры
 for (int i = 0; i < number_line; i++)[
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.08.2016, 21:32
Помогаю со студенческими работами здесь

Индекс находился вне границ массива в List при параллельных вычислениях
BudgetReport reportOldState = GetBudgetReport(this.Id); List&lt;BudgetReportElement&gt; updatedElements = new...

Метод для сортировки массива, методом пузырька - индекс находился вне границ массива
Доброго времени суток. Я изучаю С# недавно. Прочел похожие темы на форму, но так и не понял, как исправить эту ошибку.. Вот написал...

Индекс находился вне границ массива
Три недели изучал SQL. Вернулся в С# и сижу туплю). Хотел рандомно выводить обьекты класса но ошибка. Помогите понять почему...

Индекс находился вне границ массива
Не понимаю в чем причина и как ее исправить Размерность массива зависит от файла using Ext.Net; using OpenXmlPowerTools; using...

Индекс находился вне границ массива
При вводе больше 2 пробелов оно выдает ошибку что индекс находился вне границ массива .Как это исправить? using System; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru