2014-01-09 4 views
0

Следующая ситуация: У меня есть массив, размер которого 2. Нет, я хочу получить доступ ко второму измерению. Как я могу достичь этой цели?Как получить доступ к второму размеру массива

Вот мой код, чтобы разъяснить мою проблему:

private static int[,] _Spielfeld = new int[_Hoehe, _Breite]; 

    private static bool IstGewonnen(int spieler) 
    { 
     bool istGewonnen = false; 

     for (int zaehler = 0; zaehler < _Spielfeld.GetLength(0); zaehler++) 
     { 
      //Here i cant understand why compiler doesnt allow 
      //Want to give the second dimension on the Method 
      istGewonnen = ZeileSpalteAufGewinnPruefen(_Spielfeld[zaehler] ,spieler); 
     } 

     return istGewonnen; 
    } 

//This method want to become an Array 
private static bool ZeileSpalteAufGewinnPruefen(int[] zeileSpalte, int spieler) 
{ 
    //Some further code 
} 

Компилятор говорит:. «Аргумент от типа междунара [,] не присваиваемый аргумент типа Int [] В Java это работает, как я . ожидается, спасибо заранее

+0

Помимо синтаксиса, почему «spieler» будет значением для «Breite» массива? – Alexander

+0

Вы пробовали МАССИВ [1D] [2D]? –

+0

Вы не можете получить доступ к строке или столбцу 2D-массива. Вам нужно разрезать его собственный собственный массив 1D. Или используйте неровный массив вместо прямоугольного массива. – Euphoric

ответ

2

C# допускает два разных предложения two flavors of multidimensional arrays которые, хотя они выглядят очень похожими, обрабатывают совершенно по-другому на практике.

У вас есть настоящий multidimensional array, из которого вы не можете автоматически извлечь срез. Это было бы возможно (как на Java), если бы у вас был jagged array.

Если выбор наличия многомерного массива является преднамеренным и обязательным, вам необходимо извлечь срезы вручную; например, см. this question.

Если выбор между зубчатым и многомерным открыт, вы также можете рассмотреть возможность переключения на зубчатый массив и получение опции разрезания бесплатно.

2

Определите массив как зазубренный массив (массив массивов):..

private static int[][] _Spielfeld = new int[10][]; 

Затем цикл по первому измерению и инициализировать

for (int i = 0; i < _Spielfeld.Length; i++) 
{ 
    _Spielfeld[i] = new int[20]; 
} 

Тогда остальная часть вашего кода будет скомпилирована.

Смежные вопросы