pianostout
pianostout

Reputation: 15

Java Matrices Dot Product ArrayIndexOutOfBoundsException

I'm getting an error on line 66 c[rowA][colB] = c[rowA][colB] + a[rowA][colA]*b[colA][colB];. I went through the indices by hand, just can't figure out where the index went wrong. Help is greatly appreciated.

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);
        }     
    }
}

Upvotes: 0

Views: 49

Answers (2)

KunLun
KunLun

Reputation: 3225

I will show you a simple example.

int[] a = new int[3];

That mean a can have only 3 values.

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

If you try a[3] it will be out of bound.

So. You have

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

And try to access c[rowA][colB] which is out of bound.

In your three for loops, I think, you want to use i,j and k.

Upvotes: 0

gagan singh
gagan singh

Reputation: 1611

I guess you meant to use the indices i,j,k instead of rowA, colB etc in the following code.

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

Upvotes: 1

Related Questions