2015-05-28 2 views
2

Я просматривал и видел сообщения об инициализации зубчатых 3D-массивов на других языках, но не на Java.JAVA - Инициализировать Jagged 3D Array с помощью циклов?

Мне нужен пользовательский ввод для инициализации размеров этого зубчатого 3D-массива. Так, например

UserInput: 3

Значение Я хотел бы array[3][][]. Затем

UserInput: 2, 1, 2

Это означает, что array[space0][2][], array[space1][1][], array[space2][2][]

Конечный и третий [ ] в массиве инициализируется в тот же размер, как следующий предыдущая сторона пространства. Я, наверное, сказал это ужасно. Пример,

array[space0][2][] является array[space0][2][1] и array[space1][1][] является array[space1][1][2]

Я надеюсь, что я объяснил, что достаточно хорошо.

Моя проблема - это знание Java как языка программирования и выяснение того, как правильно инициализировать материал.

Я могу легко принять пользовательский ввод X, а затем пойти array[X][][], а затем взять X дополнительных входов для array[X][w,x,y][] и т. Д., Но Java это не нравится.

+2

Можете ли вы показать свою попытку кода? – MaxZoom

+0

Основная проблема заключается в том, что мне гораздо удобнее использовать структуры данных на других языках, которые гораздо более гибкие, чем обычные массивы. Я не могу понять, «правильный» способ инициализировать что-то вроде этого. То, что я написал, не использовало циклы, потому что оно не инициализирует то, как я представляю себе, когда я пытаюсь это сделать за строкой. – jonbon

+0

Вот вам [статья] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html) для чтения. – MaxZoom

ответ

2

Если я понял ваш вопрос правильно, то это должно быть то, что вы ищете:

int xSize = 3;// 
int[] ySizes = {1, 2, 3};// sizes for y 
int[] zSizes = {1, 2, 3, 5, 6, 7}; 
//    [ ] [ ] [  ] 

int[][][] array3d = new int[xSize][][];// pre-initialize x 

for (int x = 0; x < array3d.length; x++) 
    array3d[x] = new int[ySizes[x]][];// set the sizes of y 

int pos = 0; 
for (int x = 0; x < array3d.length; x++) 
    for (int y = 0; y < array3d[x].length; y++) 
     array3d[x][y] = new int[zSizes[pos++]];// set the sizes of z 


// fill the array with some test values 
for (int x = 0; x < array3d.length; x++) 
    for (int y = 0; y < array3d[x].length; y++) 
     for (int z = 0; z < array3d[x][y].length; z++) 
      array3d[x][y][z] = x * y * z; 

// print the array 
System.out.println(
     Arrays.deepToString(array3d) 
       .replace("],", "],\n ") 
       .replace("]],", "]],\n")); 
// the call to replace just improves readability 

Идея заключается в том, так как в Java 3D массивы массивов массивов массивов, вы создаете первый массив, заполнить его с массивами требуемого размера, затем перебирайте новые массивы и заполняйте их массивами правильного размера.

+0

Я очень ценю это! Я сейчас работаю над тем, чтобы сделать это за меньшее количество строк :) Спасибо! – jonbon

+0

Нет проблем, я надеюсь, что это не лучший ответ, потому что это немного долго ... –