一到java的编程思维,希望各位可以解决一下 有一个三维数组a(10)(9)(8)每个元素在内存中占3个存储单位,a的首地址a(0)(0)(0)是100。问:a(4)(5)(7)的地址和a(1)(5)(6)的地址分别是多少 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我想说的各位有没有办法JAVA程序使用代码将他写出来,并且能够运行出正确的结果 用程序,可以这样吧,或者做一个函数,把数组下标当作参数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=1636a(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,所以自己还是倾向于一楼的答复:不确定. 希望高人给个解答 有什么看不懂的?a[0][0][0]的地址是100,存储单元是3,那么a[0][0][1]的地址就是100+3a[0][0][2]的地址就是100+3+3=100+2*3...a[0][0][7]的地址就是100+3+3=100+7*3a[0][1][0]的地址=100+8*3a[0][1][1]的地址=100+9*3=100+1*8*3+1*3 //对照数组下标,自己想想吧依次类推a[4][5][7]的地址=100+7(第3维下标)*3+5(第2维下标)*8(第三维长度)*3+4(第一维下标)*9(第二维长度)*8(第三维长度)*3=1105明白了吧? x*y*z+y*z+z 应该是 x*j*k+y*k+z, 抱歉 确实忽略了,java的数组内存分配不一定是连续的,那就无法确定了 谢谢qybao(阿宝)现在给分,结帖。 有没有Hotedit的视频教程或者讲解之类的,我是学生,想学习一下,求助各位前辈 请帮忙看个程序 我要求点击下 SUM加1,使用了静态的SUM 怎么不可以 问一个关于命令行参数个数的问题! SCJP中的一道题,大家探讨! Vector问题请各位给看看 软件自动更新的问题 请问他们的区别 ———《菜菜鸟》菜级问题二:有参数程序执行不成功。—《来者有分》—— 关于JPanel滚动的问题 求助java初学者,请问怎么在飞机大战中实现爆炸效果 求救我需要java连接jdbc的3个jar包 请教经典算法
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是不是这一个意思
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,所以自己还是倾向于一楼的答复:不确定. 希望高人给个解答
a[0][0][0]的地址是100,存储单元是3,那么
a[0][0][1]的地址就是100+3
a[0][0][2]的地址就是100+3+3=100+2*3
...
a[0][0][7]的地址就是100+3+3=100+7*3
a[0][1][0]的地址=100+8*3
a[0][1][1]的地址=100+9*3=100+1*8*3+1*3 //对照数组下标,自己想想吧
依次类推
a[4][5][7]的地址=100+7(第3维下标)*3+5(第2维下标)*8(第三维长度)*3+4(第一维下标)*9(第二维长度)*8(第三维长度)*3=1105明白了吧?