Задать вопрос
@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
    SDP-030_PRG Продвинутая разработка в Microsoft .NET
    1 неделя
    Далее
  • Stepik
    PRO C#. Управление памятью
    3 недели
    Далее
  • Учебный центр IBS
    DEV-009_NET Разработка через тестирование (TDD) на языке C#
    1 неделя
    Далее
Пригласить эксперта
Ответы на вопрос 1
Mrrl
@Mrrl
Заводчик кардиганов
Вынести дублирующиеся тела циклов в отдельные функции. Циклов останется столько же, но они станут короче. Потом можно будет смотреть, что ещё можно исправить.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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