Задать вопрос
@akass
Developer

Рефакторинг циклов возможен?

Можно ли как-то отрефакторить, чтобы не городить кучу похожих циклов?
Думал можно вынести в отдельный метод, но все равно получается много циклов, 2 для двух направлений и другие под разные параметры.
Может можно как-то сделать шаблон цикла?

private static void NonEqual()
        {
            
            if (_ncr > _nci)
            {
                for (int i = _nci; i < _stolbcov; i++)
                {


                    if (_matrix[_nsi, i] % _stolbcov == _ncr)
                    {
                        _way = _tempway;
                        _input = _matrix[_nsi, i];
                        Calculation();
                        EqualColumns();
                        break;
                    }
                    else
                    {
                        _tempway.Add(_matrix[_nsi, i]);
                    }


                }
            }
            else
            {
                for (int i = _nci; i >= 0; i--)
                {


                    if (_matrix[_nsi, i] % _stolbcov == _ncr)
                    {
                        _way = _tempway;
                        _input = _matrix[_nsi, i];
                        Calculation();
                        EqualColumns();
                        break;
                    }
                    else
                    {
                        _tempway.Add(_matrix[_nsi, i]);
                    }


                }
            }

            

        }

        private static void EqualColumns()
        {
            // Way.Add(Input);
            if (_receiver > _input)
                for (int j = _nsi; j < _strok; j++)
                {
                    if (_matrix[j, _nci] == _receiver)
                    {
                        //Way.Add(matrix[j, NCI]);
                        break;
                    }
                    else
                    {
                        _way.Add(_matrix[j, _nci]);
                    }
                }
            else
            {
                for (int j = _nsi; j >= 0; j--)
                {
                    if (_matrix[j, _nci] == _receiver)
                    {
                        //Way.Add(matrix[j, NCI]);
                        break;
                    }
                    else
                    {
                        _way.Add(_matrix[j, _nci]);
                    }
                }
            }
        }

        private static void EqualRows()
        {
            //  Way.Add(Input);
            if (_receiver > _input)
            {
                for (int j = _nci; j < _stolbcov; j++)
                {

                    if (_matrix[_nsi, j] == _receiver)
                    {
                        //Way.Add(matrix[NSI, j]);
                        break;
                    }
                    else
                    {
                        _way.Add(_matrix[_nsi, j]);
                    }
                }
            }
            else
            {
                for (int j = _nci; j >=0; j--)
                {
                    
                    if (_matrix[_nsi, j] == _receiver)
                    {
                        //Way.Add(matrix[NSI, j]);
                        break;
                    }
                    else
                    {
                        _way.Add(_matrix[_nsi, j]);
                    }
                }
            }

        }

        private static void FillingMatrix(int n, int m)
       {
           int stroka = n;
           int stolbec = m;
            _matrix = new int[stroka, stolbec];

           int cnt = 0;
           Console.WriteLine("исходная матрица:");

           for (int i = 0; i < stroka; i++)
           {
               for (int j = 0; j < stolbec; j++)
               {
                   _matrix[i, j] = cnt;
                   cnt++;
                   Console.Write(" "+_matrix[i, j] + "\t");

               }

               Console.WriteLine(Environment.NewLine);
           }

           
       }
  • Вопрос задан
  • 249 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Учебный центр IBS
    DEV-005 Управление зависимостями в .NET
    1 неделя
    Далее
  • Merion Academy
    C# разработчик с нуля
    4 месяца
    Далее
  • Stepik
    PRO C#. Профессия "Backend разработчик"
    4 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 1
Mrrl
@Mrrl
Заводчик кардиганов
Вынести дублирующиеся тела циклов в отдельные функции. Циклов останется столько же, но они станут короче. Потом можно будет смотреть, что ещё можно исправить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы