Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892

Имя матрицы не существует в данном контексте. Можно менять размерность матрицы после её определения?

28.09.2019, 20:56. Показов 1568. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код:
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace lab1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            if ((comboBox1.Text != "") && (comboBox2.Text != ""))
            {
                int[,] matrix = new int[Convert.ToInt32(comboBox1.Text), Convert.ToInt32(comboBox2.Text)];
                dataGridView1.ColumnCount = Convert.ToInt32(comboBox1.Text);
                dataGridView1.RowCount = Convert.ToInt32(comboBox2.Text);
            }
            else
            {
                MessageBox.Show("Пожалуйста введите размер матрицы!");
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            for (int i=0; i< Convert.ToInt32(comboBox1.Text);i++)
            {
                for (int j = 0; j < Convert.ToInt32(comboBox2.Text); j++)
                {
                    matrix[i, j] = dataGridView1[i, j];
                }
            }
        }
    }
}
Ошибка в строке 40: имя matrix не сущ. в данном контексте.
Я примерно понимаю из-за чего ошибка. Можно сразу нажать на кнопку сохранить значения матрицы, и тогда массива matrix существовать не будет. С другой стороны, размерность matrix задаёт пользователь. То есть заранее, при инициализации, нельзя определить матрицу (ведь нужно писать размерность). Или можно? Можно как-то определить при инициализации, и после менять размер двумерного массива в c#? И как мне вообще поступать?
Подумал задать 9 двумерных массивов (размерность может быть от 2x2 до 4х4, всего 9 вариаций размерности), но это будет глупой тратой ресурсов компьютера, так ведь?

Добавлено через 19 минут
П.с. строки 20-32 показывают что произойдёт при нажатии на кнопку сохранить размер матрицы. Строки 34-40 покажут что произойдёт при нажатии на кнопку сохранить значения матрицы
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.09.2019, 20:56
Ответы с готовыми решениями:

Имя Clipboard не существует в данном контексте
Приветствую вас. Работаю с буфером обмена и происходит ошибка при компиляции. Ошибка то что: Имя Clipboard не существует в...

Имя DaysInMonths не существует в данном контексте
&quot;имя DaysInMonths не существует в данном контексте&quot; что это значит и как это можно исправить? using System; using...

CS0103 Имя не существует в данном контексте
CS0103 Имя &quot;ChangePass&quot; не существует в текущем контексте. CS0103 Имя &quot;Add&quot; не существует в текущем контексте. ...

3
64 / 45 / 20
Регистрация: 04.12.2018
Сообщений: 334
28.09.2019, 23:02
Лучший ответ Сообщение было отмечено triatri3 как решение

Решение

triatri3,
Цитата Сообщение от triatri3 Посмотреть сообщение
matrix[i, j] = dataGridView1[i, j];
Ты не определил матрицу в функции
C#
1
button1_Click
Цитата Сообщение от triatri3 Посмотреть сообщение
int[,] matrix = new int[Convert.ToInt32(comboBox1.Text), Convert.ToInt32(comboBox2.Text)];
Здесь ты ее определяешь, но к событийной функции
C#
1
button1_Click
этот массив никак не относиться.
C#
1
button1_Click
Здесь ты определяешь матрицу но она определена и доступна только в пределах этот событийной функции. Создай матрицу как закрытое поле.

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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace lab1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
     int[,] matrix;
        private void button2_Click(object sender, EventArgs e)
        {
            if ((comboBox1.Text != "") && (comboBox2.Text != ""))
            {
                matrix = new int[Convert.ToInt32(comboBox1.Text), Convert.ToInt32(comboBox2.Text)];
                dataGridView1.ColumnCount = Convert.ToInt32(comboBox1.Text);
                dataGridView1.RowCount = Convert.ToInt32(comboBox2.Text);
            }
            else
            {
                MessageBox.Show("Пожалуйста введите размер матрицы!");
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            for (int i=0; i< Convert.ToInt32(comboBox1.Text);i++)
            {
                for (int j = 0; j < Convert.ToInt32(comboBox2.Text); j++)
                {
                    matrix[i, j] = dataGridView1[i, j];
                }
            }
        }
    }
}
1
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
29.09.2019, 11:21  [ТС]
Возникла следующая ошибка:
в строке 51 после запуска, ввода размера матрицы, её значения и при нажатии на кнопку "М-норма" выводит ошибку "Ссылка на объект не указывает на экземпляр объекта". Что не так? Как исправить?
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
54
55
56
57
58
59
60
61
62
63
64
65
66
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace lab1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int[,] matrix;
        int[] sum_mnorm; //переменные для сохранения сумм строк
 
        private void button2_Click(object sender, EventArgs e) //ввод размера матрицы
        {
            if ((comboBox1.Text != "") && (comboBox2.Text != ""))
            {
                matrix = new int[Convert.ToInt32(comboBox1.Text), Convert.ToInt32(comboBox2.Text)];
                dataGridView1.ColumnCount = Convert.ToInt32(comboBox1.Text);
                dataGridView1.RowCount = Convert.ToInt32(comboBox2.Text);
            }
            else
            {
                MessageBox.Show("Пожалуйста введите размер матрицы!");
            }
        }
 
        private void button1_Click(object sender, EventArgs e) //сохранение значений матрицы
        {
            for (int i = 0; i < Convert.ToInt32(comboBox1.Text); i++)
            {
                for (int j = 0; j < Convert.ToInt32(comboBox2.Text); j++)
                {
                    matrix[i, j] = Convert.ToInt32(dataGridView1[i, j].Value);
                }
            }
        }
 
        private void button3_Click(object sender, EventArgs e) //кнопка для расчёта m-нормы
        {
            for (int i = 0; i < Convert.ToInt32(comboBox2.Text); i++)
            {
                sum_mnorm[i] = 0; //инициализация
            }
            for (int i = 0; i < Convert.ToInt32(comboBox2.Text); i++)
            {
                for (int j = 0; j < Convert.ToInt32(comboBox1.Text); j++)
                {
                    sum_mnorm[i] += matrix[i, j]; //подсчёт сумм для каждой строки
                }
            }
            for (int i = 0; i < Convert.ToInt32(comboBox2.Text); i++)
            {
                MessageBox.Show(Convert.ToString(sum_mnorm[i])); //для себя, чтобы видеть результат суммы элементов строк
            }
        }
    }
}
0
64 / 45 / 20
Регистрация: 04.12.2018
Сообщений: 334
29.09.2019, 11:30
массив имеет нулевую ссылку так как память под него не выделена
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void button3_Click(object sender, EventArgs e) //кнопка для расчёта m-нормы
        {
      sum_mnorm=new int[Convert.ToInt32(comboBox2.Text)]
            for (int i = 0; i < Convert.ToInt32(comboBox2.Text); i++)
            {
                sum_mnorm[i] = 0; //инициализация не объязательна так С# все обнулит
            }
            for (int i = 0; i < Convert.ToInt32(comboBox2.Text); i++)
            {
                for (int j = 0; j < Convert.ToInt32(comboBox1.Text); j++)
                {
                    sum_mnorm[i] += matrix[i, j]; //подсчёт сумм для каждой строки
                }
            }
            for (int i = 0; i < Convert.ToInt32(comboBox2.Text); i++)
            {
                MessageBox.Show(Convert.ToString(sum_mnorm[i])); //для себя, чтобы видеть результат суммы элементов строк
            }
        }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.09.2019, 11:30
Помогаю со студенческими работами здесь

Не все ветви кода возвращают значение и имя Redirect не существует в данном контексте
Всем привет. Есть такая проблема:Visua Studio выдаёт 2ошибки: 1. CountersHot.GetCountersH()&quot;: не все ветви кода возвращают значение. ...

Размерность матрицы задается на форме, матрицы можно умножать и складывать
Размерность матрицы задается на форме, матрицы можно умножать и складывать. Форма должна содержать кнопку чтобы отчистить все матрицы,...

Элемент не существует в данном контексте
Есть выражение y= ln(x^3-8)..... Создал метод для вычисления логарифма, но вызвать этот метод в главной функции не могу пишет: элемент не...

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

С# Элемент matrix не существует в данном контексте
В теле метода пытаюсь работать с внешней переменной массива - выдает ошибку. Как быть? Переменная и класс находятся в одном пространстве...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru