Рекурсивная функция внутри метода - C#

Узнай цену своей работы

Формулировка задачи:

Помогите переделать
 private void Move_Click(object sender, EventArgs e)
        {
            foreach (GraphObject elem in elements)
            {
                if (elem.Selected)
                {
                    Random r = new Random();
 
                    try
                    {
                        elem.X = r.Next(panel1.Width);
                    }
                    catch (ArgumentException)
                    {
                        elem.X = r.Next(panel1.Width);
                    }
 
                    try
                    {
                        elem.Y = r.Next(panel1.Height);
                    }
                    catch (ArgumentException)
                    {
                        elem.Y = r.Next(panel1.Height);
                    }
                }
                panel1.Invalidate();
            }
        }
В общем, как переписать код более логично? Ну то есть мне надо, чтобы никогда ошибка не появлялась. Тут она появляется, редко...А нужно, чтобы вообще никогда.
Я их вынесла в отдельные ф-ии. Более логично нельзя?
        private void GenerateMove(GraphObject el)
        {
            Random r = new Random();
            try
            {
                el.X = r.Next(panel1.Width);
                el.Y = r.Next(panel1.Width);
            }
            catch (ArgumentException)
            {
                GenerateMove(el);
            }
        }
 
        private void Move_Click(object sender, EventArgs e)
        {
            foreach (GraphObject elem in elements)
            {
                if (elem.Selected)
                {
                    GenerateMove(elem);
                }
                panel1.Invalidate();
            }
        }

Решение задачи: «Рекурсивная функция внутри метода»

textual
Листинг программы
private void Move_Click(object sender, EventArgs e)
{
    Random r = new Random();
    foreach (GraphObject elem in elements)
    {
        if (elem.Selected)
        {
            for(;;)
            {
                try { elem.X = r.Next(panel1.Width); break; }
                catch (ArgumentException) { }
            }
            for(;;)
            {
                try { elem.Y = r.Next(panel1.Height); break; }
                catch (ArgumentException) { }
            }
        }
        panel1.Invalidate();
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5
Похожие ответы