Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

С# нужен пример правильной конструкции if for else if for

kolibri kolibri Мастер (2408), на голосовании 1 год назад
4 дня до отчисления, нужно самому разобраться в с#. У меня не работает вот этак конструкция. Вот весь код. Нужно заполнять массив рандомными переменными, что бы, если количество строк в массиве четное, то поменять строки местами по правилу: первую строку со второй, третью - с четвертой и т.д. Если количество строк в массиве нечетное, то оставить массив без изменений.
Знаю что внутри if бред написан( я просто эксперементировал)
using System;
namespace ConsoleApplication
{
class Class
{
static int[,] Input(out int n)
{
Console.Write("введите размерность массива");
n = int.Parse(Console.ReadLine());
int[,] a = new int[n, n];
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
{
Random random = new Random();
a[i, j] = random.Next (-10, 10);
Console.Write("a[{0},{1}]= ", i, j);
}
return a;
}

static void Print(int[,] a)
{
for (int i = 0; i < a.GetLength(0); ++i, Console.WriteLine())
for (int j = 0; j < a.GetLength(1); ++j)
Console.Write("{0,5} ", a[i, j]);
}

static void SwitchRows(int[,] array)
{
var iMax = array.GetLength(0);
var jMax = array.GetLength(1);
if (a[i, j] % 2 != 0)
{
for (int i = 0; i < iMax; i = i + 2)
{
if (i + 1 == iMax)

for (int j = 0; j < jMax; j++)
{
var a = array[i, j];
array[i, j] = array[i + 1, j];
array[i + 1, j] = a;
}
}
else
{
for (int i = 0; i < iMax; i = i + 2)
{
if (i - 1 == iMax)
for (int j = 0; j < jMax; j++)
{
var a = array[i, j];
array[i, j] = array[i + 1, j];
array[i + 1, j] = a;
}
}

}
}

static void Main()
{
int n;
int[,] myArray = Input(out n);
Console.WriteLine("Исходный массив:");
Print(myArray);
SwitchRows(myArray);
Console.WriteLine("Измененныймассив:");
Print(myArray);

}
}
}
}
Голосование за лучший ответ
Максим Искусственный Интеллект (213289) 1 год назад
Не очень понял твой подход. Если массив имеет нечётное число строк, тогда массив нужно оставить без изменений.

 int length = array.GetLength(0);  
int rowLength = array.GetLength(1);
if (length % 2 == 1) return;

// Тут переставляем строки одним единственным циклом с шагом 2.

Кстати, если массив будет рваным array[][], тогда строки будет переставлять проще, так как можно обращаться к строке по одному индексу array[0]. Но не знаю, допустимо ли это.
kolibri kolibriМастер (2408) 1 год назад
точно, спасибо большое. Такую тупую ошибку я делал. Просто уже часов 12 без остановки программирую. С с# только сегодня познакомился
Максим Искусственный Интеллект (213289) kolibri kolibri, для одного дня неплохо, если до этого не программировал. Не понятно тогда, чё отчисляют.
Похожие вопросы