ошибка в коде C#, winforms,

вот часть кода, прога винформы, C# ошибка в на строке, где current_generation_distances[h] Ошибка не в компиляторе, а при запуске алгоритма. Пишет, что индекс находился вне границ массива

number_of_genes = Project.number_of_points - 1;
        public static int number_of_steps= 5, number_of_population = 4;
        static int the_same_distance, i, j, for_switching_gene, number_of_chromosome, a1, a2, split,number_of_parent1,number_of_parent2, inversion_first_position, inversion_second_position, number_of_genes;
        static Random for_randomizer=new Random();
        static int[,] chromosome;
        static double[,] distances_between_points;
        static double[] current_generation_distances;
        static double the_best_distance;
        static List<int> for_random_generating = new List<int>();
        static List<int> for_generating_new_ones_and_swap = new List<int>();            

chromosome = new int[number_of_population * 2, number_of_genes];
            distances_between_points = new double[number_of_genes+1, number_of_genes+1];
            current_generation_distances = new double[number_of_population*2];

            for (i = 0; i < number_of_genes+1; i++)
                for (j = i+1; j < number_of_genes+1; j++)
                { distances_between_points[i, j] =  Math.Sqrt((Project.Points[i].X - Project.Points[j].X) ^ 2 + (Project.Points[i].Y - Project.Points[j].Y) ^ 2);
                    distances_between_points[j, i] = distances_between_points[i, j];
                }


            int h, o;
            for (number_of_chromosome=number_of_population; number_of_chromosome < number_of_population * 2; number_of_chromosome++) 
                do
                {
                    inversion_first_position = for_randomizer.Next(0, number_of_genes - 1);
                    inversion_second_position = for_randomizer.Next(inversion_first_position, number_of_genes);
                    a1 = inversion_first_position; a2 = inversion_second_position;
                    while (a1 < inversion_second_position && a2 > inversion_first_position)
                    {
                        for_switching_gene = chromosome[number_of_chromosome, a1];
                        chromosome[number_of_chromosome, a1] = chromosome[number_of_chromosome, a2];
                        chromosome[number_of_chromosome, a2] = for_switching_gene;
                        a1++; a2--;
                    }
                }
                while (checking_chromosome(number_of_chromosome));
                for (h = number_of_population; h < number_of_population * 2; h++)
                    current_generation_distances[h] = distances_between_points[0, chromosome[h, 0] - 1]+distances_between_points[chromosome[h,number_of_genes-1]-1,0];
                for (h= number_of_population; h < number_of_population*2; h++)
                    for (o = 0; o < number_of_genes-1; o++)
                        current_generation_distances[h] += distances_between_points[chromosome[h, o] - 1, chromosome[h, o + 1] - 1];

Ответы (0 шт):