日期:2014-05-20  浏览次数:20702 次

一到java的编程思维,希望各位可以解决一下
有一个三维数组a(10)(9)(8)每个元素在内存中占3个存储单位,a的首地址a(0)(0)(0)
是100。问:a(4)(5)(7)的地址和a(1)(5)(6)的地址分别是多少

------解决方案--------------------
无法确定
------解决方案--------------------
a(4)(5)(7)的地址=100+7*3+5*8*3+4*9*8*3=1105
------解决方案--------------------
a(4)(5)(7)的地址=100+(5*10*9+6*9+8)*3=1636
a(1)(5)(6)的地址=100+(2*10*9+6*9+7)*3=823
------解决方案--------------------
这个题想考什么
------解决方案--------------------
用程序,可以这样吧,或者做一个函数,把数组下标当作参数
int[][][] a = new int[10][9][8];
int count = 0;
for (int i=0; i <10; i++) {
for (int j=0; j <9; j++) {
for (int k=0; k <8; k++) {
a[i][j][k] = count++; //这里统计位置偏移数
}
}
}


System.out.println( "&a[4][5][7]= " + (100 + a[4][5][7]*3));
System.out.println( "&a[1][5][6]= " + (100 + a[1][5][6]*3));
或者
getAddress(int[] a, int i, int j, int k) {
return (100 + a[i][j][k] * 3);
}
System.out.println( "&a[4][5][7]= " + getAddress(4, 5, 7));
System.out.println( "&a[1][5][6]= " + getAddress(1, 5, 6));

不知道LZ是不是这一个意思



------解决方案--------------------
xuehuashijie() 的答案: a(4)(5)(7)的地址=100+(5*10*9+6*9+8)*3=1636
a(1)(5)(6)的地址=100+(2*10*9+6*9+7)*3=823 中将java的array和c中的等同起来,这点还有些怀疑. java的多维数组是不是放在一个连续空间的?如果真的是,那么代为解释他的答案: 假定 array a[i][j][k], 则 元素 a[x][y][z] 是第 x*y*z+y*z+z 个(这里将a[0][0][0]当做第0个)
然后可得地址如上. 不过有可能不是一个连续空间,因为java的 多维array是 array of arrays,所以自己还是倾向于一楼的答复:不确定. 希望高人给个解答