2016-05-04 2 views
1
public static void map_one() 
    { 
     const int width = 10; 
     const int height = 5; 

     int[,] map = new int[width, height] {"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
              "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
              "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
              "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
              "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",}; 

     map[playerx, playery] = 1; 
     for (height = 0; height < 20; height++) 
     { 
      for(width = 0; width < 20; width++) 
      { 
       Console.Write(map[width, height] + ""); 
      } 
      Console.WriteLine(); 
     } 

    } 

Im получая проблемы с массивом, который вы видите там, он говорит мне «Массив инициализации длины„10“, как ожидается, .Затем для кода, который я написал чтобы на самом деле вывести все это, в цикле я получаю проблему как для высоты, так и для ширины. «Левая часть задания должна быть переменной, свойством или индексом»C# Попытка сделать картографическую рабочий массив

Если вам нужно больше info тогда, пожалуйста, спрашивайте.

+2

Вы объявляя свой массив как 'int' но инициализирующий его с' string's (т.е. '' 0 "') не 'int' (т.е. '0'). Не сказать, что это не так, но это одно плохое в том, что вы делаете. На самом деле, как это вообще можно скомпилировать? Или это? –

ответ

2

Вам не нужно указывать размеры массива при инициализации ialize их

использовать его как так

int[,] map = new int[,] {...} 

Edit: в вас цикле установить предел высоты и ширины, как и 20, что приведет исключение во время выполнения

сделать это вместо:

int width = map.GetLength(0); 
int height = map.GetLength(1); 

Edit:

Ваш окончательный код должен выглядеть следующим образом

const int width = 10; 
    const int height = 5; 

    var map = new int[width, height]; 

    map[playerx, playery] = 1; 
    for (int h= 0; h< map.GetLength(1); h++) 
    { 
     for(int w= 0; w< map.GetLength(0); w++) 
     { 
      Console.Write(map[w, h] + ""); 
     } 
     Console.WriteLine(); 
    } 
+0

Не могли бы вы быть более конкретными? – ConfirmedSavage

+0

вы также создали массив типа int и инициализируете его строкой типа. –

+0

@ConfirmedSavage компилятор достаточно умен, чтобы знать, когда вы используете инициализатор объекта ('{...}') после объявления вашего массива, чтобы подсчитать ширину и высоту для вас. Вы можете исключить их. – Jonesopolis

0

Несколько вопросов, чтобы отметить ..

One:

"0",};

ошибка синтаксиса прямо там :)

Два:

ваша ширина и высота объявляются "Уст". Поэтому вы не можете присвоить им какую-либо ценность после объявления.

Три:

INT [,] карта = новый INT [ширина, высота];

все, что вам нужно, как по умолчанию все значения в этом массиве будет автоматически инициализируется 0.

Кроме того, вы не можете присвоить строку типа "0" в целое число (целое).

+0

Завершающая запятая в инициализаторе коллекции действительно действительна, компилятор ее игнорирует. Например. 'var [] test = new [] {" 0 ",};' – Jonesopolis

0

Вы инициировало 2D массив с массивом 1D Это должно быть что-то вроде

int[,] map = int[2,2] { {0, 0}, {0, 0}}; 

Во-вторых, 2 индексные переменные, используемые в цикле то же самое с 2 константной переменной вы объявлены в начале, индекс должен меняться, но const, ну .. постоянный и не может измениться.
Просто используйте другую переменную для индекса как

for (int i = 0; i < width; ++i) 
    for (int j = 0; j < height; ++j) 
     ... 

И о Dont передать значение строки целочисленной матрицы