Erro estranho com return JAVA

Fiz este programa e dá erro,não sei como corrigir.
public class Run {

  public static void main (String[] args) {
    System.out.println(array());
  }

  private static int [][] array(){

    int[][] a =  { {3,3,4},
                    {4,0,0},
                    {0,1,0},
                    {2,-3,1} };

    for(int i=0; i < a.length; i++){
      for(int j=0; j < a[i].length; j++){
          //System.out.println( a[i][j] );
        }
      }

  return a;
}
}

image

Isso não é erro.

É que quando você imprime um array com println, internamente é chamado o método toString do array. Só que arrays herdam este método de Object, cuja implementação é:

// método toString de java.lang.Object
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

Ou seja, ele retorna o nome da classe e o hashcode da mesma. No caso de arrays, a documentação explica que a quantidade de [ no início representa a dimensão do array (no caso, é bidimensional, por isso tem [[), e I é o prefixo que indica que os elementos do array são números inteiros. Por isso que a saída começa com [[I, e o código que tem depois do @ é o hashcode.

Enfim, se quer imprimir o array diretamente, uma alternativa é usar a classe java.util.Arrays:

System.out.println(Arrays.deepToString(array())); // [[3, 3, 4], [4, 0, 0], [0, 1, 0], [2, -3, 1]]

mas e para fazer return não dá??

Como assim?

o programa que eu fiz eu fiz o metodo static int[][] e gostava de fazer return do array[][] para não usar o System.out.println

Não sei se entendi, mas seria apenas o caso de fazer:

int[][] umArrayQualquer = array();
// usar umArrayQualquer aqui

É isso?

image
assim?? continua a dar o erro

Como eu já disse, não é erro. Quando você imprime um array com println, ele é mostrado por padrão desse jeito (com o [, @ e o hashcode).

Se quer imprimir os elementos dele, ou você faz como já indicado:

int[][] umArrayQualquer = array();
System.out.println(Arrays.deepToString(umArrayQualquer));

Ou você faz um for no array, imprimindo os elementos:

for (int[] linha: umArrayQualquer) {
    for (int n : linha) {
        System.out.print(n + " ");
    }
    System.out.println();
}

ok obrigado!!!