2015-07-07 3 views
-1

Я немного застрял в арифметике для этой программы. У меня есть строка theString, длина которой x*y*z. x, y и z - размеры массива char [] [] [] (позволяет называть его cArr).Индексирующая строка для вставки в char [] [] [] array

Я хочу вставить символы theString в cArr на основе определенного индекса. Вот пример массива 5x4x3.

String theString = someMethod(); //returns a string of length 60 
char[][][] cArr = new char[5][4][3]; 
for (int z = 0; z < 3; z++) { 
    for (int y = 0; y < 4; y++) { 
     for (int x = 0; x < 5; x++) { 
      cArr[x][y][z] = theString.charAt(/*~~~*/); 
     } 
    } 
} 

я могу выяснить арифметические для вставки символов в полукокс [5] [4] массив из строки длины 20:

for (int y = 0; y < 4; y++) { 
    for (int x = 0; x < 5; x++) { 
     cArr[x][y] = theString.charAt((5*y)+x); 
    } 
} 

Что арифметическое я должен использовать в методе charAt() для трехмерного массива символов?

Моя лучшая попытка была:

char[][][] cArr = new char[5][4][3]; 
for (int z = 0; z < 3; z++) { 
    for (int y = 0; y < 4; y++) { 
     for (int x = 0; x < 5; x++) { 
      cArr[x][y][z] = theString.charAt(((3^2)*z)+(4*y)+x); 
     } 
    } 
} 

Но это делает все г-указательные слои cArr же.

+0

Используя [эту терминологию] (http://i.ytimg.com/vi/mIJXeNWIE1E/hqdefault.jpg): количество полных панелей раз кубов панель + количество полных столбцов (в частичной панели) раз кубов в столбце + количество кубов в частичном столбце. –

ответ

3

Правило прост для таких проблем. Вы начинаете с самого внутреннего цикла и начинаете с x + y*(length of x) + z*(length of y)*(length of x).

В этом примере было бы,

cArr[x][y][z] = theString.charAt(x + y*5 + z*4*5);