multiplicacion de matrices

hola compañeros tengo un pequeño problema lo que pasa es que deseo haer una multiplicacion de matrices , funciona con matrices cuadradas pero por ejemplo con una de 3X2 y una de 2X2 marca desbordamiento en la parte donde hago precisamente la multiplicacion de matrices. es en el penultimo ciclo. marca un desbordamiento. "org.apache.jasper.JasperException: java.lang.ArrayIndexOutOfBoundsException: 1"

<%--
    Document   : index
    Created on : 04-oct-2010, 7:07:47
    Author     : ALUMNOA1
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>arreglo bidimencional</title>
    </head>
    <body>
        <h1>Hello arreglo bidimencional!</h1>
       <%@page import=" javax.swing.JOptionPane;"%>
       <%! String StrEdad=""; %>

        <%  int filas=0, columnas=0, indFilas=0, indColumnas=0;//variables del arreglo A
            int filasB=0, columnasB=0,indFilasB=0, indColumnasB=0;//VARIABLES DEL ARREGLO B
            filas=Integer.parseInt(JOptionPane.showInputDialog("ingrese numero de FILAS"));
            columnas=Integer.parseInt(JOptionPane.showInputDialog("ingrese numero de COLUMNAS"));
            filasB=Integer.parseInt(JOptionPane.showInputDialog(" FILAS del arregloB deve de ser ugual a:"+columnas));
            columnasB=Integer.parseInt(JOptionPane.showInputDialog("COLUMNAS del arregloB deve de ser igual a"+filas));
            while(columnas!=filasB)//RECORDEMOS QUE TANTO LAS COLUMNAS DE A DEVEN DE SER IGUAL A FILAS DE B B
            {
                JOptionPane.showMessageDialog(null," FILAS del arregloB deve de ser igual a:"+columnas);
                filasB=Integer.parseInt(JOptionPane.showInputDialog(" FILAS del arregloB deve de ser ugual a:"+columnas));
            columnasB=Integer.parseInt(JOptionPane.showInputDialog("COLUMNAS del arregloB deve de ser igual a"+filas));
            }
            int[][]arregloA=new int[filas][columnas];
            int[][]arregloB=new int[filasB][columnasB];
            for(indFilas=0;indFilas<filas;indFilas++)
            {
                for(indColumnas=0;indColumnas<columnas;indColumnas++)
                {
                    arregloA[indFilas][indColumnas]=Integer.parseInt(JOptionPane.showInputDialog("valor para la coordenada["+indFilas+"-"+indColumnas+"]"));

                }

            }
           out.println("ARREGLO BIDIMENCIONAL A:");
           out.println("<h3>"+"DE ORDEN :"+filas+" X "+columnas+"<h3>");
           out.println("<br>");
           out.println("<table align=less  border=4>");//usaremos una tabla representara mejor a la matriz
       for(indFilas=0;indFilas<arregloA.length;indFilas++)
        {
          out.println("<tr>");//iniciamos una fila
            for(indColumnas=0;indColumnas<columnas;indColumnas++)
              {

                 out.println("<td>");
                 out.println(arregloA[indFilas][indColumnas]);
                 out.println("</td>");

              }
              out.println("</tr>");

        }
           out.println("<table>");//cerramos la tabla que estamos usando

            out.println("ARREGLO BIDIMENCIONAL  B:");//INICIAMOS PARA LLENAR EL SEGUNDO ARREGLO

            for(indFilasB=0;indFilasB<filasB;indFilasB++)
            {
                for(indColumnasB=0;indColumnasB<columnasB;indColumnasB++)
                {
                    arregloB[indFilasB][indColumnasB]=Integer.parseInt(JOptionPane.showInputDialog("valor para la coordenada["+indFilasB+"-"+indColumnasB+"]"));

                }

            }
            out.println("<h3>"+"DE ORDEN :"+filasB+" X "+columnasB+"<h3>");
           out.println("<br>");
           out.println("<table align=less  border=4>");//usaremos una tabla representara mejor a la matriz
       for(indFilasB=0;indFilasB<arregloB.length;indFilasB++)
        {
          out.println("<tr>");//iniciamos una fila
            for(indColumnasB=0;indColumnasB<columnasB;indColumnasB++)
              {

                 out.println("<td>");
                 out.println(arregloB[indFilasB][indColumnasB]);
                 out.println("</td>");

              }
              out.println("</tr>");

        }
           out.println("<table>");//cerramos la tabla que estamos usando
        %>
<b><h1>

        <%//este parte es la que hace la multiplicacion donde se me marca el error
            int j=0, k=0, i=0;
            int [][]arregloC=new int [filas][columnasB];//declaramos nuestra matriz resultande con el numero de filas de a y el numero de columnas de c
            for(i=0; i<filas; i++)
                {
                for(j=0; j<columnasB; j++)
                    {
                    for(k=0; k<columnasB; k++)
                        {
                            arregloC[j][i]=arregloC[j][i]+(arregloA[i][k]*arregloB[k][j]);
                        }
                    }
                }
       %>
</h1>

       <%//imprimir el arreglo c
       out.println("matriz resultante:");//imprimismo la matriz resultante
       out.println("<h3>"+"matriz resultante de orden: "+filas+" X "+columnasB+"<h3>");
       out.println("<table align=CENTER border=4>");//usaremos una tabla representara mejor a la matriz
       for(indFilasB=0;indFilasB<filas;indFilasB++)
        {
          out.println("<tr>");//iniciamos una fila
            for(indColumnasB=0;indColumnasB<columnasB;indColumnasB++)
              {

                 out.println("<td>");
                 out.println(arregloC[indFilasB][indColumnasB]);
                 out.println("</td>");

              }
              out.println("</tr>");//cerramos la fila

        }
           out.println("<table>");//cerramos la tabla que estamos usando

       %>
    </body>
</html>