Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
1 / 1 / 0
Регистрация: 10.04.2021
Сообщений: 75

Ошибка: Необработанное исключение типа "System.IndexOutOfRangeException". Индекс находился вне границ массива

28.02.2022, 17:43. Показов 3076. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Помогите найти ошибку (Класс lin_uravn, строка 24) (Необработанное исключение типа "System.IndexOutOfRangeException" произошло в ... . Дополнительные сведения: Индекс находился вне границ массива.)

Хотела реализовать часть задания, а именно: создала две формы (первая - основная, вторая - для ввода кол-ва линейных уравнений системы), и класс, который хранит количество линейных уравнений и все коэффициенты системы линейных уравнений. (т.е. программа в дальнейшем будет решать систему линейных уравнений). Хотела просто рандомные числа вывести в dataGridView, для начала.
Сразу скажу, что возможно код не очень чистый. При написании кода программа работа, затем (толи я что-то наклацала, толи код так "правильно" с самого начала работал) прога начала вылетать и писать ошибку. Я уже второй час пересматриваю код, но так и не могу найти то место с ошибкой. Пробовала пройтись отладчиком... что-то не получилось найти ошибку, наверное что-то с dataGriedView...

Смысл программы: в форме 1 нажимаешь на кнопку "Ввести кол-во лин. уравнений" -> открывается форма 2 -> пишешь кол-во уравнений (не меньше 2-х) -> в dataGriedView (форма 1) создаются ячейки -> нажимаешь на кнопку "заполнить рандомно" и вылетает ошибка
Код прилагаю ниже.

Form1
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
public partial class Form1 : Form
    {
        public static int n=2;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2();
            int i;
            f.ShowDialog();
            n = Form2.n;
            try
            {
                dataGridView1.ColumnCount = n + 1;
                dataGridView1.RowCount = n;
                for (i = 0; i < n; i++)
                {
                    dataGridView1.Columns[i].HeaderText = "коэфф.";
                }
                dataGridView1.Columns[n].HeaderText = "свободн. член";
            } catch { DialogResult rr = MessageBox.Show("Возникла ошибка !", "Лабораторная работа 1"); }
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            lin_uravn l=new lin_uravn(n);
            l.rand(n);
        }
    }
Form2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public partial class Form2 : Form
    {
        public static int n=2;
        public Form2()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                n=int.Parse(textBox1.Text); 
                Form1 f = new Form1();
                if (n < 2)
                {
                    errorProvider1.SetError(textBox1, "Введите число уравнений, равное не меньше двум!");
                }
                else if (n >= 2) { Close(); }
            }catch { DialogResult r = MessageBox.Show("Возникла ошибка при вводе!", "Лабораторная работа 1"); }
        }
    }
Класс lin_uravn
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
class lin_uravn
    {
        private int n; //кол-во уравнений в системе
        private double[,] A; //массив коэффициентов
 
        public lin_uravn(int N){
            N = n;
            A = new double[n, n + 1];
        }
        public lin_uravn() {
            n = 2;
            A = new double[n,n+1];
        }
 
        public void rand(int n) 
        {
            Random rr = new Random();
            Form1 ff = new Form1();
            int i, j, m=n+1;
            for (i = 0; i < n; i++) {
                for (j = 0; j < m; j++){
                    A[i, j] = rr.NextDouble();
                    ff.dataGridView1[i, j].Value = A[i, j]; //здесь пишет ошибку
                }
            }
        }
 
        void setn(int p){n=p;}
        int getn(){return n;}
    }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.02.2022, 17:43
Ответы с готовыми решениями:

System.IndexOutOfRangeException: "Индекс находился вне границ массива."
for (I = 1; I &lt;= textBox1.Text.Length - 1; I++) { for (J = I + 1; J &lt;= textBox1.Text.Length; J++) ...

System.IndexOutOfRangeException: "Индекс находился вне границ массива."
Не могу никак сообразить, как исправитьSystem.

System.IndexOutOfRangeException: "Индекс находился вне границ массива."
Здравствуйте форумчане... Ситуация такая...через ком порт приходят 6 байт данных я их помещаю в массив и каждый байт через индекс...

31
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
02.03.2022, 20:16
Студворк — интернет-сервис помощи студентам
ne_master, но мне бы пример ввода посмотреть, как это должно выглядеть в вашем представлении. Чтобы не возникло неоднозначностей.

Добавлено через 1 минуту
Цитата Сообщение от ne_master Посмотреть сообщение
это как бы квадратная матрица из коэффициентов
Вот, верно значит я понял. А неизвестные x и y куда совать?

Добавлено через 1 минуту
Т.е. a и b, т.н. ?
0
1 / 1 / 0
Регистрация: 10.04.2021
Сообщений: 75
02.03.2022, 20:18  [ТС]
Неизвестные, я рассчитывала после решения выводить в отдельный текстбокс. При решении нам нужны только эти коэффициенты.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
02.03.2022, 20:21
Цитата Сообщение от ne_master Посмотреть сообщение
При решении нам нужны только эти коэффициенты.
Ладно, будем последовательны. А дальше война план покажет.
Сделаем пока "правильный" грид с нужными строками и столбами. Не обещаю что сегодня.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
03.03.2022, 12:52
ne_master, что-то типа такого:
0
1 / 1 / 0
Регистрация: 10.04.2021
Сообщений: 75
03.03.2022, 12:55  [ТС]
Да, похоже
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
03.03.2022, 12:59
class Matrix
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
    internal class Matrix
    {
        private int[,] array;
        public int[,] Array
        {
            get => array;
            private set => array = value;
        }
 
        public Matrix() => 
            array = new int[ 2, 3 ];
 
        public Matrix( int n ) =>
            array = new int[ n, n + 1 ];
 
        public void FillRandom( int min = 1, int max = 50 )
        {
            if ( array == null )
                throw new ArgumentNullException( "Массив еще не создан!" );
 
            Random Rnd = new Random();
            for ( int i = 0; i < array.GetLength( 0 ); i++ )
                for ( int j = 0; j < array.GetLength( 1 ); j++ )
                    array[ i, j ] = Rnd.Next( min, max );
        }
    }

class Form1
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
45
46
47
48
49
50
51
52
53
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click( object sender, EventArgs e )
        {
            if ( !int.TryParse( tbEqCount.Text, out int row ) ) 
            { 
                errProv.SetError( tbEqCount, "Введите число!" );
                return;
            }
 
            if ( row < 2 )
            {
                errProv.SetError( tbEqCount, "Введите число уравнений, равное не меньше двум!" );
                return;
            }
 
            errProv.Clear();
            Matrix mtx = new Matrix( row );
            mtx.FillRandom();
            DgvUpdate( mtx );
        }
 
 
        private void DgvUpdate( Matrix m )
        {
            dgv1.Rows.Clear();
            dgv1.Columns.Clear();
            dgv1.RowCount = m.Array.GetLength( 0 );
            dgv1.ColumnCount = m.Array.GetLength( 1 );
            for ( int i = 0; i < m.Array.GetLength( 0 ); i++ )
                for ( int j = 0; j < m.Array.GetLength( 1 ); j++ )
                    dgv1.Rows[ i ].Cells[ j ].Value = m.Array[ i, j ];
 
            for ( int i = 0; i < m.Array.GetLength( 1 ); i++ )
                dgv1.Columns[ i ].HeaderText = "Коэфф";
            dgv1.Columns[ m.Array.GetLength( 1 ) - 1 ].HeaderText = "Св. чл.";
        }
 
 
        private int[,] DgvRead()
        {
            int[,] arr = new int[ dgv1.RowCount, dgv1.ColumnCount ];
            for ( int i = 0; i < dgv1.RowCount; i++ )
                for ( int j = 0; j < dgv1.ColumnCount; j++ )
                    arr[ i, j ] = ( int ) dgv1.Rows[ i ].Cells[ j ].Value;
            return arr;
        }
    }
1
1 / 1 / 0
Регистрация: 10.04.2021
Сообщений: 75
03.03.2022, 13:01  [ТС]
Спасибо большое! Дальше попытаюсь сама
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
03.03.2022, 13:07

Перед public Form1():
C#
1
int[,] DataArray;
Кнопка считывания данных из грида:
C#
1
2
3
4
private void btDgvRead_Click( object sender, EventArgs e )
{
    DataArray = DgvRead();
}
Если в гриде изменили данные, то считываем их в массив.
Вычисления уравнений делаем с данными из массива.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
03.03.2022, 13:13
Обновленный DgvRead(), фикс ошибки приведения типа:
C#
1
2
3
4
5
6
7
8
private int[,] DgvRead()
{
    int[,] arr = new int[ dgv1.RowCount, dgv1.ColumnCount ];
    for ( int i = 0; i < dgv1.RowCount; i++ )
        for ( int j = 0; j < dgv1.ColumnCount; j++ )
            arr[ i, j ] = int.Parse( dgv1.Rows[ i ].Cells[ j ].Value.ToString() );
    return arr;
}
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
03.03.2022, 13:15
Лучший ответ Сообщение было отмечено ne_master как решение

Решение

Проект:
WindowsFormsApp1.7z
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
03.03.2022, 13:15
Поменяйте все int'ы на double, если надо.
0
1 / 1 / 0
Регистрация: 10.04.2021
Сообщений: 75
03.03.2022, 13:16  [ТС]
Хорошо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.03.2022, 13:16

System.IndexOutOfRangeException: "Индекс находился вне границ массива."
По идеи должно выводить в новый файл но изменённый но пишет ошибку System.IndexOutOfRangeException: &quot;Индекс находился вне границ...

System.IndexOutOfRangeException: "Индекс находился вне границ массива."
Помогите решить проблему, при запуске кода меняя число строк и столбцов выдаёт в TextBox двух найденных элементов &quot;Матрицы.Form1,...

Не выводит статистику. System.IndexOutOfRangeException: "Индекс находился вне границ массива."
Вообщем есть файл с которого программа читает вопросы и вставляет их. они все такого формата 1.jpg 1/6. Какой из перечисленных...

Индекс находился вне границ массива IndexOutOfRangeException
namespace zadacha5 { public partial class GlavnoForma : Form { public GlavnoForma() { ...

Ошибка: Индекс находился вне границ массива
Как исправить эту ошибку? Заранее спасибо public partial class Form1 : Form { public string path =...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru