Multiplicando Matrizes

Boa tarde! Enfim, estou desenvolvendo um código que multiplica matrizes para teste de aptidão. Porém estou com um maldito erro: ArrayIndexOutOfBoundsException.

    public static int[][] multiplicaMatrizes(int matriz1[][], int matriz2[][]) {
		
		int resultado[][] = new int [matriz1.length][TestaCalculadora.tamColunas2];
		
		for (int j = 0; j < matriz1.length; j++) {

			for (int i = 0; i < matriz1.length; i++) {
				resultado[j][i] += matriz1[j][i] * matriz2[i][0];
				
				for (int k = 0; k < matriz1.length; k++) {
					resultado[j][k] += matriz1[j][i] * matriz2[i][k];
				}
			
			}
			
		}
			
		return resultado;
		
	}

Não entendi o porque você usar 3 for’s se as matrizes possuem apenas 2 dimensões?

Além disso, você está definindo que a matriz terá a mesma quantidade de colunas que as linhas… não seriam 2 laços dessa forma?

for (int i = 0; i < matriz1.length; i++) {
    for (int j = 0; j < matriz1[i].length; j++) {
        resultado[i][j] += matriz1[i][j] * matriz2[i][j];
    }
}
return resultado;

Eu ja resolvi, vlw. Eu usei 3 for’s pq a multiplicação de matrizes funciona assim: vc multiplica as linhas da primeira matriz pelas colunas da segunda.
O código ficou o seguinte:

    public static int[][] multiplicaMatrizes(int matriz1[][], int matriz2[][]) {
    		
    		int[][] resultado = new int[matriz1.length][matriz2[0].length];

    	    for (int i = 0; i < matriz1.length; i++) {
    	    	
    	        for (int j = 0; j < matriz2[0].length; j++) { 
    	        	
    	            for (int k = 0; k < matriz1[0].length; k++) { 
    	            	
    	                resultado[i][j] += (matriz1[i][k] * matriz2[k][j]);
    	                
    	            }
    	            
    	        }
    	        
    	    }
    	    
    	    return resultado;
    	    
    	}