Попарно переставить строки в двумерном массиве C#
Нужно попарно поменять строки в матрице(1-ю со 2-ой, 3-ю с 4-ой и т.д.). Это мое решение, но почему то при выводе выводится изначальная матрица, т.е. код не работает или работает не правильно. Буду рад любым предложениям.
int t = 0;
while (t < array.GetLength(0))
{
for (int j = 0; j < array.GetLength(1); j++)
{
var a = array[t, j];
array[t, j] = array[t + 1, j];
array[t + 1, j] = a;
}
t = t + 2;
//cheking for overload
if(t >= array.GetLength(0))
break;
}
Ответы (1 шт):
Когда в программе больше одной ошибки, то порой непросто понять, в правильную ли сторону движешься - потому что результат всё равно неправильный. Разбивайте задачу на отдельные компоненты, чертите на листочке значения переменных в цикле если в уме дебаг сложно или отлаживайтесь на живую.
Вот вам готовый отлаженный код, написал с нуля:
private void SwitchRows(int[,] array)
{
var iMax = array.GetLength(0);
var jMax = array.GetLength(1);
for (int i = 0; i < iMax; i=i+2)
{
if(i+1==iMax)
break;
for (int j = 0; j < jMax; j++)
{
var a = array[i, j];
array[i, j] = array[i+1, j];
array[i+1, j] = a;
}
}
}
Результат до и после:
var array = new int[,]
{
{1,2,3},
{4,5,6},
{7,8,9},
};
SwitchRows(array);
И постфактум сравним две версии, они же практически одинаковы (мысленно замените ваш while на мой for):
- проверка вынесена наверх
- в проверке должно быть не
t >= array.GetLength(0)аt + 1 >= array.GetLength(0)
Вот и вся разница.
Мммм... и даже всего одна ошибка, не две: проверка наверху из-за разницы между циклами while и for.
А ошибка в t vs t + 1 - это вам нужно на листочке нарисовать значения переменных для массива с чётным и нечётным числом строк, можно даже не углубляться во внутренний цикл.
