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;
}
}
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á??
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?
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();
}