2016-02-21 6 views
0

У меня есть метод, который принимает в размерах для массива в списке Paramsдоступ все элементы многомерного массива

private int[] anArray; 

public MDArray(int... sizes){ 
anArray = new int[sizes[0]]; 

for (int u : anArray){ 
    System.out.println(u); 
    } 

Если я прохожу в (12,13), как Params в моей функции, то цикл печатает 0 12 раз. Я не уверен, как получить доступ к подслоям многомерного массива.

Я понимаю, что в Java нет реального многомерного массива, а не массива массивов.

Если я пытаюсь

for (int[] u: anArray) { 
    for (int elem: u) { 
    System.out.println(elem); 
    } 
} 

Это не удается, как и не является массивом но инт.

Я бы очень признателен за это.

+0

Посмотрите на этот ответ: http://stackoverflow.com/a/17559021/5450645 –

+0

J. su, я видел это, но я получаю «int не может быть преобразован в int []» как ошибка в «for (int [] a: flatArray)» – Benirving92

+0

@ cricket_007 он создается в конструкторе в зависимости от списка пройденных измерений , Таким образом, это может быть int [], int [] [] или int [] [] [], поэтому мне нужно преобразовать как массивы 2-d, так и 3-мерные в 1-d – Benirving92

ответ

0

Он печатает 12 раз 0 из-за ваше заявление на

anArray = new int[sizes[0]]; 

в этот момент вы получите 0. элемент размеров массива, который составляет 12 и инициализировать 12x1-мерной-IntegerArray. Это то же самое, как

anArray = new int[12]; 

На первом, чтобы решить вашу проблему, что нужно изменить anArray из NX1-D-массива в NX2-d-Array (изменить anArray [] для anArray [] []).

После этого вы можете инициализировать anArray с параметрами таким образом:

anArray = new int[size[0]][size[1]]; 

Но в этот момент вы должны иметь четкое представление о том «ква ... размере» в качестве средства параметра. int ... size - целочисленный массив, который зависит от значения в вызове функции. В вашем случае у вас был MDArray (12,13) ​​в качестве звонка. которые передавались как int [2] со значениями (12,13).

Так, чтобы быть уверенным, чтобы иметь правильные параметры, заданные в момент вызова вашей функции вы можете просто проверить для таких параметров, как:

if(sizes.length>=2){ 
anArray = new int[size[0]][size[1]]; 
} 

в предложении, если, вы убедитесь, что у вас есть по крайней мере 2 параметры, сохраненные в массиве.

Edit: извините забыл кое-что:

Наконец, вы можете получить доступ к этому массиву с чем-то вроде

for(int[] e :anArray) 
     for(int k:e){ 
      System.out.println(k); 
     } 
} 
Смежные вопросы