0

I am having to write this program for school that multiplies a pair of two-dimensional arrays. I keep getting an out of bounds:3 error when I try to run the program.

I have gone over the code many times and can't for the life of me figure out where the breakdown is happening. I ran a debug and this first breakpoint was at the if statement "if (a[0].length != b.length)" I couldn't figure out why that was a breakpoint.

Could someone help me?

    public class Multiply {

    public static double[][] Multiply_2D_Arrays(double[][] a, double[][] b)

    { 
        if (a[0].length != b.length) // Check to see if the number of a's colums equals the number of b's rows
        {
            throw new IllegalArgumentException("Matrices don't match: " + a[0].length + " != " + b.length);

        }

        int a_rows = a.length;      // Defines the variable M as the row length of array a
        int b_columns = b[0].length;   // Defines the variable N as the column length of array b
        double[][] c = new double[a_rows][b_columns]; // This means that the dimensions of array c will be the rows of a by the columns of b

        for(int i = 0; i < a.length; i++)
            {
                for(int j = 0; j < b[0].length; j++)
                {
                    for(int k = 0; k < a[0].length; )
                    {

                        c[i][j] += a[i][k] * b[k][j];     //Iterates through each row and column of array a and b and then adding it to the dot point sum

                    }

                }
            }

            return c;      //returns the final new array c

        }

    public static void main(String[] args)

    {
        double[][] array1 = {{4.0, 5.0, 6.0}, {2.0, 1.0, 4.0}, {8.0, 7.0, 6.0}, {1.0, 1.0, 2.0}};
        double[][] array2 = {{5.0, 7.0, 7.0, 8.0}, {8.0, 8.0, 9.0, 2.0}, {10.0, 2.0, 3.0, 1.0}};
        double[][] array3 = Multiply.Multiply_2D_Arrays(array1, array2); //Calls the Multiply_2D_Arrays method

        for(int i = 0; i < array3.length; i++)
        {
            for (int j = 0; j < array3.length; j++)
            {
                System.out.print(array3[i][j] + " ");
            }
        }

        System.out.println();
    }

}

2 Answers 2

1

You have missed k++ in for(int k = 0; k < a[0].length; )

Then you have an infinity loop

Also if you want to print the result as matrix, put System.out.println() inside for loop :

    for(int i = 0; i < array3.length; i++)
    {
        for (int j = 0; j < array3.length; j++)
        {
            System.out.print(array3[i][j] + " ");
        }
        System.out.println();
    }
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks so much! I am just beginning to learn Java, that was a total oversight on my part. I think I'm still working out the elementary kinks :-)
0

The program will execute correctly if you change this for(int k = 0; k < a[0].length; ) to for(int k = 0; k < a[0].length;k++ ) you missed the k++ inside for loop.

2 Comments

Thanks so much! I am just beginning to learn Java, that was a total oversight on my part. I think I'm still working out the elementary kinks :-)
you are welcome, also accept the answer if this one or the other are really an answer for your question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.