我有一个名为eM
的3D数组:
double[][][] eM = new double[4][4][4];
我还有一个帮助方法可以将int
转换为char
:
public static char intToChar(int i) {
switch (i) {
case 0:
return 'A';
case 1:
return 'B';
case 2:
return 'C';
default:
return 'D';
}
}
我有四个整数变量:
int A = 108;
int B = 299;
int C = 302;
int D = 411;
现在,这是棘手的部分。我想浏览3D数组eM的每个索引并乘以其索引值。以便
[0][0][0] = 1*1*1 = 1; [0][0][1] = 1*1*2 = 2; ...; [3][3][3] = 4*4*4 = 64
。
for (int i=0; i<4; i++){
for (int j=0; j<4; j++){
for (int k=0; k<4; k++){
char I = intToChar(i);
char J = intToChar(j);
char K = intToChar(k);
// Not sure what to do here
}
}
}
我该怎么做?
答案 0 :(得分:2)
您需要能够通过索引引用A ... D,因此您需要将它们编入索引:
int[] d = {A, B, C, D};
在for循环之前。然后你的for循环很简单:
eM[i][j][k] = d[i]*d[j]*d[k];
这会将(i,j,k)
处的每个值设置为相应的A ... D被乘数。
答案 1 :(得分:0)
因此,您希望获取与索引对应的char对应的整数值。我想你可以删除intToChar步骤并直接转到你想要的索引的整数值。
public static int getIntValue(int i) {
switch (i) {
case 0:
return 108;
case 1:
return 299;
case 2:
return 302;
default:
return 411;
}
}
for (int i=0; i<4; i++){
for (int j=0; j<4; j++){
for (int k=0; k<4; k++){
eM[i][j][k]= getIntValue(i) * getIntValue(j) * getIntValue(k);
}
}
}
答案 2 :(得分:0)
你需要这样做:
char I = intToChar(i);
char J = intToChar(j);
char K = intToChar(k);
eM[i][j][k] = I*J*K;
除此之外,你还应该为任何大小的3D数组推广for循环。
for (int i=0; i<eM.length; i++){
for (int j=0; j<eM[i].length; j++){
for (int k=0; k<eM[i][j].length; k++){
//here goes the logic
}
}
}
答案 3 :(得分:0)
最终版本,使用-ea vm选项运行以显示断言正常工作
import java.util.HashMap;
public class mult {
/**
* @param args
*/
public static char intToChar(int i) {
switch (i) {
case 0:
return 'A';
case 1:
return 'B';
case 2:
return 'C';
default:
return 'D';
}
}
public static void main(String[] args) {
HashMap<Character, Integer> lookup = new HashMap<Character, Integer>();
lookup.put('A', 108);
lookup.put('B', 299);
lookup.put('C', 302);
lookup.put('D', 411);
// TODO Auto-generated method stub
Integer[][][] eM=new Integer[4][4][4];
for (int i=0; i<4; i++){
for (int j=0; j<4; j++){
for (int k=0; k<4; k++){
eM[i][j][k] = (lookup.get(intToChar(i))) *
(lookup.get(intToChar(j))) *
(lookup.get(intToChar(k)));
}
}
}
assert(eM[0][0][0] == 108*108*108);
assert(eM[0][0][1] == 108*108*299);
assert(eM[3][3][3] == 411*411*411);
}
}