Вы, вероятно, хотите пройти через массив дважды.
Point[] points = new Point[100];
for(int i = 0; i < points.Length; i++)
for (int j = points.Length - 1; j >= i; j--)
{
float distance = 0;
if(i != j)
distance = CalculateDistance(points[i], points[j]);
// Do more stuff here
}
Очевидно, вы можете просто запустить два цикла для одинаковой длины, но это даст вам один и тот же результат дважды.Когда i
и j
имеют одно и то же значение (i = 10
, j = 15
и позже i = 15
и j = 10
), вы делаете один и тот же расчет, чтобы получить тот же результат.Чтобы избежать этого, мой второй цикл запускает только половину значений, чтобы не повторять вычисления.
Метод CalculateDistance выполняет те же функции, что и код, который вы написали ранее, в моем случае следующее:
private static float CalculateDistance(Point point1, Point point2)
{
float X1 = point1.X;
float X2 = point1.Y;
float Y1 = point2.X;
float Y2 = point2.Y;
return (float)Math.Sqrt((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2));
}
Таким образом, я могу в любое время повторно использовать и переупорядочивать свои вычисления, потому что мне нужно только переместить одну строку.Обратите внимание, что вы всегда можете просто использовать поплавки в качестве параметров вместо локальных, но я чувствовал, что этот способ сделает его более читабельным здесь, в этом примере.
Я также пропустил вычисления, когда расстояние было равно, потому чтосравнивались одинаковые значения.