Java double型数组做矩阵乘法时的问题

学习日记

  最近在准备蓝桥杯,就重新把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();
    }

}}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值