黑马程序员技术交流社区

标题: 下面的java关于数组相乘的代码为什么不能执行? [打印本页]

作者: 鲍霄霄    时间: 2012-7-15 11:32
标题: 下面的java关于数组相乘的代码为什么不能执行?
public class Chengfa{
public static void main(String args[]){
int a[][]={{2,1,4,0},{1,-3,3,4}};
int b[][]={{1,3,1},{0,-1,2},{4,0,-2}};
int c[][]= new int[2][3];
for(int i =0;i<c.length;i++){
for(int j =0;j<c[0].length;j++){
c[j]=0;
for(int x=0;x<a[0].length;x++){
c[j]+=a[x]*b[x][j];
}
}
}
for(int i=0;i<c.length;i++){
for(int j = 0;j<c[0].length;j++){
System.out.print("c["+i+"]["+j+"]= "+c[j]+" ");
}
}
}
};

作者: 黑马振鹏    时间: 2012-7-15 11:46
c[j]=0;
没看代码,看了语法也知道这里有问题,c[j]是个数组吧,怎么能直接赋值呢?
作者: 张_涛    时间: 2012-7-15 11:49
1.在你的代码中使用了数组与数相乘,这是行不通的
2.注意数组下标问题
3.希望你能把你的需求说清楚,以便帮你更改。
作者: 陆强强    时间: 2012-7-15 12:27
本帖最后由 陆强强 于 2012-7-15 12:46 编辑

代码显示有问题 ”c  [j]”显示不出来。给你个截图

未命名.JPG (45.25 KB, 下载次数: 35)

未命名.JPG

作者: 韩伟    时间: 2012-7-15 15:09
public class Chengfa{
public static void main(String args[]){
int a[][]={{2,1,4,0},{1,-3,3,4}};
int b[][]={{1,3,1},{0,-1,2},{4,0,-2}};
int c[][]= new int[2][3];
for(int i =0;i<c.length;i++){
for(int j =0;j<c[0].length;j++){
c[j]=0;                                             //这里c[j]是一个int型的数组,既然是一个数组,怎么能直接负值呢!
for(int x=0;x<a[0].length;x++){
c[j]+=a[x]*b[x][j];                           //这里也是,a[x]是数组,而b[x][j]是一个数,这里不能进行*运算,就是说 int []  * int 是错误的。
}
}
}
for(int i=0;i<c.length;i++){
for(int j = 0;j<c[0].length;j++){
System.out.print("c["+i+"]["+j+"]= "+c[j]+" ");
}
}
}
};

作者: 党巾水    时间: 2012-7-16 12:19
int c[][]= new int[2][3];//A语句
for(int i =0;i<c.length;i++){
for(int j =0;j<c[0].length;j++){
c[j]=0;
for(int x=0;x<a[0].length;x++){
c[j]+=a[x]*b[x][j];//B语句

A语句指明c[][],是个二维数组,
B语句左侧是对c[][]二维数组中的c[]数组操作,对它操作只能指定它当中的数组,而不是具体的数字。
想指定数字,只能对c[][]这个二维数组中的子数组(我自己起的名,方便理解)进行操作。
作者: 张世威    时间: 2012-7-17 12:45
1、其实数组是一个容器而已,多维数组不过就是容器里面又装着容器,大水桶里面装着小水桶,小水桶里面又装着还要小一点的水桶,一层层的循环(看你的需求了),就像我们这个世界一样,宇宙-太阳系-。。。地球。。。。房子。。。箱子。。。。都是大的包容了小的,小的又包容了更小的。
2、容器的元素:可以是容器(就像引用数据类型一样,存放的是地址,只能又机器子来赋值),也可以是基本数据类型(可以我们来赋值)。水桶里面可以装水桶,也可以装水一样。
3、你说的那个int [i][j] c,就像一根大水桶里面装了i个小水桶,每个小水桶里面有j个小盒子,每个小盒子可以放一个int数据
   你的c[j]=0,这里的int[j]是一个小水桶呀,不能接受int值,你只能把int数据放到小盒子里面。
   而c[i][j]才是盒子;只有盒子之间才可以做赋值、+-*、等运算

4、改正:①将c[j]=0改成 c[i][j]=0;
             ②把c[j]+=a[x]*b[x][j];  改成 c[i][j]=a[i][x]*a[i][j]

5、看不懂你这题的需求是什么。。你难道是想写矩阵相乘?
作者: 王飞    时间: 2012-7-17 12:47
陆强强 发表于 2012-7-15 12:27
代码显示有问题 ”c  [j]”显示不出来。给你个截图

个么  怎么上传图啊。。。求解
作者: 王飞    时间: 2012-7-17 12:50
上面几位帅哥回答完了 我都么机会了,{:soso_e149:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2