Рекурсивная функция внутри метода - 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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д