用于插入 char[][][] 数组的索引字符串
Indexing string for insertion into char[][][] array
我对这个程序的算法有点卡壳了。我有一个长度为 x*y*z
的字符串 theString
。 x
、y
和 z
是 char[][][] 数组的维度(我们称之为 cArr
)。
我想根据特定索引将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(/*~~~*/);
}
}
}
我可以算出从长度为 20 的字符串中将字符插入 char[5][4] 数组的算法:
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 5; x++) {
cArr[x][y] = theString.charAt((5*y)+x);
}
}
对于 3 维字符数组,我应该在 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
的所有 z-index 图层都相同。
对于这样的问题,规则很简单。您从最内层的循环开始,然后继续 x + y*(length of x) + z*(length of y)*(length of x)
.
在这个例子中,它将是,
cArr[x][y][z] = theString.charAt(x + y*5 + z*4*5);
我对这个程序的算法有点卡壳了。我有一个长度为 x*y*z
的字符串 theString
。 x
、y
和 z
是 char[][][] 数组的维度(我们称之为 cArr
)。
我想根据特定索引将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(/*~~~*/);
}
}
}
我可以算出从长度为 20 的字符串中将字符插入 char[5][4] 数组的算法:
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 5; x++) {
cArr[x][y] = theString.charAt((5*y)+x);
}
}
对于 3 维字符数组,我应该在 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
的所有 z-index 图层都相同。
对于这样的问题,规则很简单。您从最内层的循环开始,然后继续 x + y*(length of x) + z*(length of y)*(length of x)
.
在这个例子中,它将是,
cArr[x][y][z] = theString.charAt(x + y*5 + z*4*5);