2014-11-13 3 views
0

Как я могу создать массив с учетом размеров, введенных пользователем?Многомерный массив с размерами

Например, если введено 5 (размеры) внутри этого массива нам нужен массив из 4-х размеров, внутри нее 3 размеров и т.д ...

Пожалуйста, помогите!

+0

Не могли бы вы быть немного более ясно? Извините, но я не понимаю, что вы говорите. – WannaBeCoder

+0

Приведите пример того, что вы ожидаете. – Riad

+0

Я имел в виду, если я даю 5 в качестве параметра, указывающего размеры массива, как я могу это сделать? Просто давая число измерений – Silmar

ответ

2

Вы можете использовать Array#newInstance

int[][][] ar = (int[][][]) Array.newInstance(int.class, 3, 2, 1); 
System.out.println(Arrays.deepToString(ar)); 

или

int[] dimensionLengths = new int[numberOfDimensions]; 
Arrays.fill(dimensionLengths, 1); 
Array.newInstance(int.class, dimensionLengths); 
+0

Я предполагаю, что OP хочет создать массив без знания размеров во время компиляции. – WannaBeCoder

+0

'numberOfDimensions' в моем втором примере не нужно знать во время компиляции – Alex

+0

Я просто перечитаю ваш ответ. Извините за мой предыдущий комментарий. Это очень хорошая идея. Однако во втором примере вам нужно заполнить это 'int [numberOfDimensions]' чем-то, прежде чем передать его в 'newInstance'. Как все или что-то. Во всяком случае, +1 за отличную идею. –

0

Поскольку массив является объектом, массив объекта Object (Object []) может содержать массивы и т. Д. Для этого потребовалось бы много отливок, и было бы очень небезопасно и безобразно, но это можно сделать.

Например:

Object[] arr3d = new Object[10];   // create the first dimension 
arr3d[0] = new Object[20];    // create the second dimension 
((Object[])arr3d[0])[0] = new Object[30]; // create the third dimension 
... 

Я не рекомендовал бы на самом деле делать это, хотя.

+0

Вам нужно сделать это в цикле, чтобы выполнить требования к вопросу. –

+0

@DavidWallace yep – Eran

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