Java矩阵点积ArrayIndexOutOfBoundsException

时间:2018-06-26 13:57:39

标签: java matrix-multiplication

第66行c[rowA][colB] = c[rowA][colB] + a[rowA][colA]*b[colA][colB];出现错误。我手工浏览了索引,只是无法弄清楚索引哪里出了问题。非常感谢您的帮助。

package arrayproducts;
import javax.swing.JOptionPane;
public class ArrayProducts {
    public static void main(String[] args) {
        String output = "";
        int rowA = Integer.parseInt(JOptionPane.showInputDialog("\nEnter the number of rows for MatrixA."));
        int colA = Integer.parseInt(JOptionPane.showInputDialog("\nEnter the number of columns for MatrixA."));
        int rowB = Integer.parseInt(JOptionPane.showInputDialog("\nEnter the number of rows for MatrixB."));
        int colB = Integer.parseInt(JOptionPane.showInputDialog("\nEnter the number of columns for MatrixB."));
        if( colA != rowB){
            output += "Cannot perform matrix operation: Inner matrix dimensions must agree.";
            output += "\nMatrixA has a dimension of "+ rowA + " x " + colA + ".";
            output += "\nMatrixB has a dimension of "+ rowB + " x " + colB + ".";
            JOptionPane.showMessageDialog(null, output);
            return;

        } else {
            output += "\nDot Product Begin:";
            int [][] a = new int[rowA][colA];
            output += "\nMatrixA has a dimension of "+ rowA + " x " + colA + ".";
            int [][] b = new int[rowB][colB];
            output += "\nMatrixA has a dimension of "+ rowB + " x " + colB + ".";
            JOptionPane.showMessageDialog(null, output);
            int [][] c = new int[rowA][colB];
            ////
            // enter first matrix
            for(int i = 0; i < rowA; i++){
                for(int j = 0; j < colA; j++){
                    a[i][j] = Integer.parseInt(
                        JOptionPane.showInputDialog("\nEnter an integer for MatrixA, row " + (i+1) + " and column " + (j+1) + "."));
                }
            }
            // add first matrix to output
            output += "\nThe first matrix is: \n";
            for(int i=0; i < rowA; i++){
                for(int j=0; j < colA; j++){
                    output += "    " + a[i][j];
                }
                output += "\n";
            }
            JOptionPane.showMessageDialog(null, output);

            ////
            // enter second matrix
            for(int i = 0; i < rowB; i++){
                for(int j = 0; j < colB; j++){
                    b[i][j] = Integer.parseInt(
                        JOptionPane.showInputDialog("\nEnter an integer for MatrixB, row " + (i+1) + " and column " + (j+1) + "."));
                }
            }
            // add second matrix to output
            output += "\nThe second matrix is: \n";
            for(int i=0; i < rowB; i++){
                for(int j=0; j < colB; j++){
                    output += "    " + b[i][j];
                }
                output += "\n";
            }
            JOptionPane.showMessageDialog(null, output);

            ////
            // compute the product
            for(int i = 0; i < rowA; i++){
                for(int j = 0; j < colB; j++){
                    for(int k = 0; k < colA ; k++){ // either colA or rowB will work here
                        c[rowA][colB] = c[rowA][colB] + a[rowA][colA]*b[colA][colB];
                    }
                }
            }
            output += "\nThe product of MatrixA and MatriB is:\n";
            for(int i=0; i < rowA; i++){
                for(int j=0; j < colB; j++){
                    output += "    " + c[rowA][colB];
                }
                output += "\n";
            }
            JOptionPane.showMessageDialog(null, output);
        }     
    }
}

2 个答案:

答案 0 :(得分:1)

我想您打算在以下代码中使用索引i,j,k代替rowA,colB等。

c[rowA][colB] = c[rowA][colB] + a[rowA][colA]*b[colA][colB];

答案 1 :(得分:0)

我将向您展示一个简单的示例。

int[] a = new int[3];

这意味着a只能有3个值。

a[0], a[1] and a[2]

如果您尝试a[3],它将超出范围。

所以。你有

int [][] c = new int[rowA][colB];

并尝试访问已超出范围的c[rowA][colB]

我认为,在您的三个for循环中,您想使用ijk