Ошибка компилятора: неверный указатель ранга: ожидается ',' или ']' при инициализации двумерного массива - PullRequest
26 голосов
/ 08 декабря 2010

У меня есть задание для класса, которое должно быть сделано в C #. Будучи полным новичком в C #, я сначала сделал проект на Java и сейчас пытаюсь преобразовать его в C #. У меня есть следующая функция, которая приводит к следующей ошибке компилятора.

Ошибка: Неверный указатель ранга: ожидается ',' или ']' в следующей строке:

int[][] grid=new int[g.cols][g.rows];

Визуальная студия подчеркивает г в г *.

public int[][] getConvergenceCounts(MandelbrotGrid g){
  int[][] grid=new int[g.cols][g.rows];

  for(int x=0;x<g.cols;x++){
     for(int y=0;y<g.rows;y++){
        double tx=x*(double)3/400-1.5;
        double ty=y*(double)3/400-1.5;
        grid[x][y]=getConvergenceCount(new Complex(ty,tx));
     }
  }

  return grid;
}

Понятия не имею, что я делаю здесь неправильно, и чтение многомерных массивов в C #, похоже, не помогло.

Ответы [ 3 ]

38 голосов
/ 08 декабря 2010

Компилятор C # считает, что вы пытаетесь объявить зубчатый массив , и делаете это неправильно. Зубчатый массив - это массив массивов , где каждый массив, содержащийся в основном массиве, может иметь различное количество элементов. Зубчатый массив объявляется следующим образом:

int[][] jaggedArray = new int[numElements][];

Что бы создать массив, который мог бы содержать в себе массивы целых чисел "numElements".

Вы хотите объявить многомерный массив , например ::

int[,] grid = new int[g.cols, g.rows];
2 голосов
/ 15 ноября 2011
public int[][] getConvergenceCounts(MandelbrotGrid g){
    int[][] grid=new int[g.cols][];

    for(int x=0;x<g.cols;x++){
     int[x] = new int[g.rows]
     for(int y=0;y<g.rows;y++){
        double tx=x*(double)3/400-1.5;
        double ty=y*(double)3/400-1.5;
        grid[x][y]=getConvergenceCount(new Complex(ty,tx));
     }
  }

  return grid;
}
0 голосов
/ 11 мая 2018

Если вы хотите использовать зубчатый массив, решение @Frank - это метод, который вам нужно сделать.Вы не можете объявить оба измерения, когда запускаете зубчатый массив, потому что предположение C # состоит в том, что ваши строки будут иметь неравные размеры.В решении @ Doughnut метод многомерного массива является хорошим решением, если у вас есть решение с матричным типом (и это так), однако C # оптимизирован для одномерных массивов, и вы все равно можете использовать опцию зубчатого массива, чтобы сэкономить временные затраты.,По этой причине, если вы будете выполнять много операций с вашим многомерным массивом, вы должны инициализировать неровный массив THEN при вводе строк, указав длину строки индивидуально.

public int[][] getConvergenceCounts(MandelbrotGrid g)
{
    int[][] grid=new int[g.cols][];

    for(int x=0;x<g.cols;x++){
        grid[i] = new int[g.rows];
        for(int y=0;y<g.rows;y++){
           double tx=x*(double)3/400-1.5;
           double ty=y*(double)3/400-1.5;
           grid[x][y]=getConvergenceCount(new Complex(ty,tx));
         }
    }
    return grid;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...