Индекс вне границ массива - C# (189450)

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

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

Здравствуйте! Столкнулся с проблемой, не могу понять где у меня ошибка. Компилятор говорит индекс вне границ массива. По моим расчетам все должно работать, но нет )
   // Здесь реализована часть алгоритма Хакими
      public static void Low_potencial(int[,] before, int[,] after) // в функцию я подал 2 двумерных массива
      {//один до сортировки алгоритмом Дейкстры и один после
          int size = (int)Math.Sqrt(before.Length);//тут нахожу размерность массива
          int k = 0; // iterator для определения размерности вспомогательного массива для алгоритма
          int max = 0;
          for (int i = 0; i < size; i++)
          {
              for (int j = i + 1; j < size; j++)
              {
                  if (before[i, j] != 8888) k++;
              }
          }
          int[,] Gamma = new int[3, k];// массив промежуточных данных в Хакими
          for (int i = 0; i < size; i++)
              for (int j = i + 1; j < size; j++)
                  if (before[i, j] != 8888)
                  {
                      Gamma[0, k] = i + 1;// Здесь компилятор ругается, что не так ?
                      Gamma[1, k] = j + 1;
                      for (int q = 0; q < size; q++)
                      {
                          if (after[i, q] < after[j, q])
                          {
                              if (max < after[i, k])
                                  max = after[i, k];
                          }
                          else
                              if (max < after[j, k])
                                  max = after[j, k];
                      }       
                  }
          Gamma[2, k] = max;
          for (int i = 0; i < k; i++)
          {
              for (int j = 0; j < 3; j++)
              {
                  Console.Write(Gamma[i,j]);
              }
              Console.WriteLine();
          }
      }
  
        static void Main(string[] args)
        { 
            int MAX = 8888;
            int[,] before = {
                          {0,2,3,1},
                          {2,0,0,1},
                          {5,6,0,8},
                          {1,2,0,0}};
            int size = (int)Math.Sqrt(before.Length);
            for (int i = 0; i < size; i++)
            {
                for (int j = i; j < size; j++)
                    if (before[i, j] == 0 && i != j)
                        before[i, j] = MAX;
            }
            int[,] after = {
                          {0,2,1,1},
                          {2,0,1,1},
                          {1,1,0,2},
                          {1,1,2,0}};
            //High_potencial(after);   
            Low_potencial(before, after);

        }
    }
}

Решение задачи: «Индекс вне границ массива»

textual
Листинг программы
int k = 10;
int[] Gamma = new int[k];
 
Gamma[k] = 12; // То же самое.

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


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

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

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