2013-04-18 84 views
-3

我有一个3D阵列称为eM引用Java中的变量?

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

我也有一个辅助方法来转换一个intchar

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

为什么你需要字符? 'eM [i] [j] [k] =(i + 1)*(j + 1)*(k + 1)'应该这样做 – svz 2013-04-18 07:16:44

+0

很难说你在做什么 – Averroes 2013-04-18 07:26:42

+0

你得到三个字符对应于循环中的每个索引。那你想做什么? – Averroes 2013-04-18 07:44:23

回答

2

你需要能够指... d通过索引,所以你需要将它们索引的数组:

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

前肚里for循环。那么你的for循环很简单:

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

这将在(i,j,k)设置每个值到相应的A ... d被乘数。

+0

对不起,我写这些值例如缘故。我将它们更新为其他内容:int A = 108,int B = 299,int C = 302,int D = 411。实际上,我在一个大for循环中运行整个代码,并且这四个整数变量将会改变!谢谢! – user2293732 2013-04-18 07:20:37

+0

@ user22我不确定这与你的问题有什么关系 - 你真的想在这里做什么? – Zyerah 2013-04-18 07:22:15

+0

@ user2293732它如何改变逻辑?仍然想要将产品存储在数组元素中。 – Ankit 2013-04-18 07:28:37

0

所以你想获得对应于索引对应的字符的整数值。我认为你可以删除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); 

      } 
     } 
    } 
+0

downvoters能解释我的原因吗? – Averroes 2013-04-18 07:22:05

+0

你还没有正确地读过这个问题。 – Ankit 2013-04-18 07:24:41

+0

@ ay89自原始问题以来的几个变化&&不太确定OP要求的是什么 – Averroes 2013-04-18 07:34:44

0

你需要这样做:

char I = intToChar(i); 
char J = intToChar(j); 
char K = intToChar(k); 
eM[i][j][k] = I*J*K; 

除此之外,你也应该概括for循环3D阵列中的任何大小。

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 
      } 
     } 
    } 
+0

对不起,我没有正确解释。请参阅我的编辑和评论与Telthien :) – user2293732 2013-04-18 07:48:12

+0

@ user2293732是这是什么上面的答案已经做了。 – Ankit 2013-04-18 07:53:48

0

最终版本,与电子艺界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); 
} 
} 
+0

非常感谢Vorsprung!这正是我需要的。我将不得不更多地关注HashMap!再次感谢!! :o) – user2293732 2013-04-18 08:02:29

+0

谢谢,接受。没有意识到这个选择...... :) – user2293732 2013-04-18 21:42:39