-3

我有一个名为的 3D 数组eM

double[][][] eM = new double[4][4][4];

我还有一个帮助方法将 an 转换int为 a 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
        }
    }
}

我怎样才能做到这一点?

4

4 回答 4

2

您需要能够通过索引引用 A...D,因此您需要在数组中对它们进行索引:

int[] d = {A, B, C, D};

在 for 循环之前。然后你的 for 循环很简单:

eM[i][j][k] = d[i]*d[j]*d[k];

这会将 at(i,j,k)的每个值设置为相应的 A...D 被乘数。

于 2013-04-18T07:16:23.140 回答
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);

            }
        }
    }
于 2013-04-18T07:17:24.953 回答
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
            }
        }
    }
于 2013-04-18T07:19:39.407 回答
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);
}
}
于 2013-04-18T07:31:32.740 回答