Arrays bidimensionais... help?

bom galera estou fazendo um app simples pra imprimir os valores de uma array, e tá dando pau na execução… alguém ajuda?

[code]/*

  • InitArray3.java
  • Fig 7.17
  • Created on 15 de Maio de 2006, 23:27
  • Inicializando arrays bidimensionais
    */

package InitArray3;

public class InitArray3 {

public static void main(String[] args) {
    int array1 [][] = { {1, 2, 3} , {4, 5, 6} };
    int array2 [][] = { {1, 3} , {3} , {4, 5, 6} };
    
    System.out.println("Valores de array1 por linha são:");
    
    outputArray ( array1 ); // exibe array 1 por linha
    
    System.out.println("Valores de array2 por linha são:");
    
    outputArray ( array2 );
} // fim de main

public static void outputArray(int array[][]) {
    
    // faz um loop pelas linhas do array
    for (int linha = 0; linha < array.length; linha++) {
        // faz um loop pelas colunas da linha atual
        for (int coluna = 0; linha < array[linha].length; coluna++)
            System.out.printf("%d   ", array[linha][coluna]);
    } // fim do for
} // fim do método

}[/code]

EXECUÇÃO:

run-single:
Valores de array1 por linha são:
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 3
at InitArray3.InitArray3.outputArray(InitArray3.java:31)
at InitArray3.InitArray3.main(InitArray3.java:18)
1 2 3
Java Result: 1
BUILD SUCCESSFUL (total time: 4 seconds)

valeu desde já…

No segundo for:
for (int coluna = 0; coluna < array[linha].length; coluna++)

bom eu vi o codigo dele e ainda estou com duvidas sobre array

estou tentando fazer um programinha pra entender mas ta dando pau
como faz pra jogar os valores e depois mastrar na tela arrays bidimencionais olha o meu fonte

class Baralho{

private int  nc;
private int  [] cartas;	//array das cartas
private int  fim;
private int  comeco;
private int  i; //variavel contadora
private char [][]nipes;


public Baralho(int nc){
//nc numero de cartass passadas pela a interface
	char a,b;
	
   cartas = new  int[nc];
   nipes =  new char[a][b];

	
	}

//gerando as cartas de nosso baralho.
public void gerar(){

	comeco = 0;
	fim  = 13;
 	
	while (i<nc)	
		{
			
			for ( i=comeco; i<fim; i ++)
			{
				cartas[i] = i+1;

// nipes[i][1] = ‘a’;
}
comeco +=13;
fim +=13;
}
}

public void mostra(){

	int valor;
	
	for( i=0; i< 13; i ++){

// cartas[i] = 1 + (int) (Math.random() * 13 );
System.out.println("pos " + i + " ehhhh " + cartas[i] + " e nipe " + nipes[i][i]);

	}
	
}

}

se alguem souber apontar o erro ficarei muito grato pois isso esta consumindo meus neuronios