学习日记
最近在准备蓝桥杯,就重新把Java的基础知识过了一下,还真发现忘了不少东西。
Java用int型数组写矩阵乘法是不会报错,但是改成double型后开始疯狂报错,后来想起来可能是因为乘法会导致精度不准确的问题,所以百度了一下,改成了用BigDecimal类(Math类里的,还有个BigInteger)来做,发现就不报错了。
还有一定要记得初始化啊!!我就是中间忘记给c初始化还报了一次错。PS:BigDecimal类有自己的add()、multiply()方法。
后来发现用double也是可以的,只是我刚开始没有分清Double和double。。。。。
哎~解决完了发现自己蠢蠢的。。。。。。
import java.math.BigDecimal;
public class JuzhenxiangCheng {
public static void main(String[] args){
BigDecimal[][] a=new BigDecimal[10][8];
BigDecimal[][] b=new BigDecimal[8][12];
BigDecimal[][] c=new BigDecimal[10][12];
BigDecimal num1=new BigDecimal("9.87");
BigDecimal num2=new BigDecimal("1.2");
//初始化啊啊啊啊!
for(int i=0;i<10;i++){
for(int j=0;j<8;j++){
a[i][j]=num1;
} }
for(int i=0;i<8;i++){
for(int j=0;j<12;j++){
b[i][j]=num2;
} }
for(int i=0;i<10;i++){
for(int j=0;j<12;j++){
c[i][j]=new BigDecimal("0");
}}
//矩阵相乘 i是a数组的行,j是b数组对的列,k是a数组的列也是b数组的行(二维数组)
for(int i=0;i<10;i++){
for(int j=0;j<12;j++){
for(int k=0;k<8;k++)
c[i][j]=c[i][j].add(a[i][k].multiply(b[k][j]));
}
}
for(int i=0;i<10;i++){
for(int j=0;j<12;j++){
System.out.print(c[i][j]+" ") ;
}
System.out.println();
}
}}