Не понимаю в чем ошибка DataGridView
Подскажите в чем ошибка, считает 2x2, 3x3 матрицы, но 2x3 выдает ошибки, что выход за индексы
Программа считает все положительные строки и если их нету сортирует матрицу по возрастанию
namespace WinAPP
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public class Data
{
public static int Value1 { get; set; }
public static int Value2 { get; set; }
}
private void button1_Click(object sender, EventArgs e)
{
{
dataGridView1.Rows.Clear();
int n = Data.Value1;
int m = Data.Value2;
dataGridView1.ColumnCount = n;
dataGridView1.RowCount = m;
button2.Enabled = true;
}
}
private void button2_Click(object sender, EventArgs e)
{
dataGridView2.Rows.Clear();
int n = Data.Value1;
int m = Data.Value2;
int k;
int p = 0;
float[,] array = new float[n, m];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
array[i, j] = Convert.ToSingle(dataGridView1.Rows[i].Cells[j].Value);
}
}
for (int i = 0; i < n; i++)
{
k = 1;
for (int j = 0; j < m; j++)
{
if (array[j, i] <= 0)
{
k = 0; break;
}
}
if (k != 0) p++;
}
label1.Text = "P = " + p.ToString();
dataGridView2.ColumnCount = dataGridView1.ColumnCount;
dataGridView2.RowCount = dataGridView1.RowCount;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
dataGridView2.Rows[i].Cells[j].Value = array[i, j];
}
if(p <= 0)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
dataGridView2.Sort(dataGridView2.Columns[0], ListSortDirection.Descending);
}
}
MessageBox.Show("P <Выполнена сортировка!");
}
}
private void Form1_Load(object sender, EventArgs e)
{
Form2 fr2 = new Form2();
fr2.Show();
}
private void button3_Click(object sender, EventArgs e)
{
}
private void button3_Click_1(object sender, EventArgs e)
{
DialogResult dialogResult = MessageBox.Show("Закрыть программу?", "Подтвердите действие", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dialogResult == DialogResult.Yes)
{
Close();
}
else if (dialogResult == DialogResult.No)
{
dialogResult = DialogResult.None;
}
}
}
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
Form1.Data.Value1 = Convert.ToInt32(row.Value);
}
Ответы (1 шт):
Вы перепутали индексы i и j при обращении к массиву.
Запомните просто, что массив - это array[строки, колонки] или array[высота, ширина], а не наоборот.
Например вот так с счетчиками array[i,j], или вот так с координатами array[y,x] или вот так array[n,m], где m - ширина, а n - высота. В индексаторах первое всегда обозначает высоту, а второе - ширину.
И циклы перебора когда вы организовываете, получается что-то типа
for (int row = 0; row < rowsCount; row++)
for (int column = 0; column < columnsCount; column++)
{
array[row, column] = ...;
}
Строки и колонки для понимания просты и привычно в индексаторах видеть сначала строки, потом колонки, а не наоборот. Попробуйте привыкнуть к этому и перестанете путаться.

