【问题标题】:Adding and multiplying Matrices Java矩阵的加法和乘法 Java
【发布时间】:2018-03-28 18:39:22
【问题描述】:

我目前正在尝试将两个矩阵相加和相乘并打印结果。我已经正确地完成了乘法运算,或者至少我可以确定,但是我无法测试结果,因为我不知道如何打印它。一切似乎都很好,我只需要弄清楚如何打印结果,但是当我加入矩阵时,我遇到了多个问题。这是我事先得到的空白代码,用于完成添加、乘法和打印矩阵所需的内容:

public class Matrix {

public static void matrix_add(double[][] a, double[][] b) {
// add matrices

}

public static void matrix_multi(double[][] a, double[][] b) {
// multiply matrices

}

public static void main(String[] args) {

 double ar1[][] =
        {{.7,.2,.1},
        {.3, .6, .1},
        {.5, .1, .4}};

 double ar2[][] =
        {{.2, .3, .5},
         {.1, .2, .1},
         {.1, .3, .4}};

matrix_add(ar1, ar2);
System.out.println();
matrix_multi(ar1, ar2);

 }

}

这是我的结果,之后我确定我的计算对于矩阵的加法和相乘是正确的:

public class operationson2Darrays {

public static void matrix_add(double[][] ar1, double[][] ar2) {
    // add matrices
    double[][] ar4 = new  double[ar1.length][ar1[0].length];
    for(int i=0;i<ar1.length;i++){
        for(int j=0;j<ar1[0].length;j++){
            ar4[i][j] = ar1[i][j] + ar2[i][j];
        }
    }


public static void matrix_multi(double[][] ar1, double[][] ar2) {
    // multiply matrices
    int i, j, k;
    int row1 = ar1.length;
    int col1 = ar1[0].length;
    int row2 = ar2.length;
    int col2 = ar2[0].length;
    int[][] ar3 = new int[row1][col2];
    for (i = 0; i < row1; i++) {
        for (j = 0; j < col2; j++) {
            for (k = 0; k < col1; k++) {
                ar3[i][j] += ar1[i][k] * ar2[k][j];
            }
        }
    }
}

public static void main(String[] args) {

    double ar1[][] =
            {{.7, .2, .1},
                    {.3, .6, .1},
                    {.5, .1, .4}};

    double ar2[][] =
            {{.2, .3, .5},
                    {.1, .2, .1},
                    {.1, .3, .4}};

    matrix_add(ar1, ar2);
    System.out.println();
    matrix_multi(ar1, ar2);


 }

}
}

我目前遇到很多问题,首先是 ar1 和 ar2 已经在范围内定义。我明白这意味着什么,但我不知道如何解决它。它也期待这一行中的标记: public static void main(String[] args) {... matrix_multi(ar1, ar2);

我开始感到非常困惑,并假设我的计算对于每个部分都是正确的,如果我突然删除添加矩阵,所有问题都会消失。对于收到的这些错误以及如何解决此问题以及如何打印矩阵结果,我将不胜感激。

【问题讨论】:

  • 复制并粘贴代码,一切正常,唯一的问题是您缺少 matrix_add 方法的右括号...除此之外,我运行您的代码没有任何错误...
  • 另外,您正在使用 int[][] 作为乘法方法,您可能想要使用 double[][]。最后我建议返回你的加法或乘法的结果,所以让你的方法返回一个 double[][] 而不是 void
  • 除了最后的换行符之外,我没有看到任何尝试在任何地方打印任何内容。
  • 我不明白如何打印我尝试过但没有任何效果的矩阵结果我希望有任何提示可以将我推向正确的方向@FredK
  • 啊我没想到!我从矩阵添加方法中删除了一个右括号,并在我的代码的最后添加了一个额外的括号,谢谢@RAZ_Muh_Taz

标签: java arrays matrix addition multiplication


【解决方案1】:

您应该让您的方法返回新的 2D 数组,以便稍后可以对数组执行某些操作,例如打印它。此外,您希望您的乘法 2D 数组是 double[][] 而不是 int[][],因为您将两个 double[][] 相乘。最后,您可以获取新创建的数组并将它们传递给打印数组内容的方法。

public static double[][] matrix_add(double[][] ar1, double[][] ar2) {
    // add matrices
    double[][] ar4 = new  double[ar1.length][ar1[0].length];
    for(int i=0;i<ar1.length;i++){
        for(int j=0;j<ar1[0].length;j++){
            ar4[i][j] = ar1[i][j] + ar2[i][j];
        }
    }

    return ar4;
}


public static double[][] matrix_multi(double[][] ar1, double[][] ar2) {
    // multiply matrices
    int i, j, k;
    int row1 = ar1.length;
    int col1 = ar1[0].length;
    int row2 = ar2.length;
    int col2 = ar2[0].length;
    double[][] ar3 = new double[row1][col2];
    for (i = 0; i < row1; i++) {
        for (j = 0; j < col2; j++) {
            for (k = 0; k < col1; k++) {
                ar3[i][j] += ar1[i][k] * ar2[k][j];
            }
        }
    }

    return ar3;
}

public static void print2DArray(double[][] ar)
{
    for(int i=0;i<ar.length;i++){
        for(int j=0;j<ar[0].length;j++){
            System.out.print(ar[i][j] + " ");
        }
        System.out.println();
    }
}

public static void main(String[] args) {

    double ar1[][] =
            {{.7, .2, .1},
                    {.3, .6, .1},
                    {.5, .1, .4}};

    double ar2[][] =
            {{.2, .3, .5},
                    {.1, .2, .1},
                    {.1, .3, .4}};

    double[][] arAdd = matrix_add(ar1, ar2);
    print2DArray(arAdd);
    System.out.println();
    double[][] arMulti = matrix_multi(ar1, ar2);
    print2DArray(arMulti);

 }

输出

0.8999999999999999 0.5 0.6 
0.4 0.8 0.2 
0.6 0.4 0.8 

0.16999999999999998 0.28 0.41000000000000003 
0.13 0.24 0.25 
0.15000000000000002 0.29 0.42000000000000004 

【讨论】:

  • 哇,谢谢!绝对完美,我曾尝试将其更改为双倍,因为我的初始矩阵无论如何都是双倍的,但我一直不小心改变了我不想做的事情。至于打印,我在做一些奇怪的事情显然是完全错误的,谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 2020-08-30
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多