Erro com função que retorna um vetor [RESOLVIDO]

Estou tentando fazer uma função que receba uma matriz e retorne os elementos ACIMA da diagonal principal dessa matriz e estou tendo problemas com o retorno.

Meu código:

public class Programa {
    
    static int[] diagonalSecundaria(int mmatriz[][]) {
        
        int cont=0;
        int diag[] = new int[3];
        
        for (int i = 0 ; i < mmatriz.length - 1 ; i++) {
            for (int j = 1 ; j < mmatriz.length ; j++) {
                diag[i] = mmatriz[i][j];
                cont++;   
            }
        }
        return diag;
    }
    
// --------------------- main ------------------------
    
    public static void main(String[] args) {
        
        final int TAMANHO_MATRIZ = 3;
        int matriz[][] = new int[TAMANHO_MATRIZ][TAMANHO_MATRIZ];
    
// inicializa a matriz;
        for (int i = 0 ; i < TAMANHO_MATRIZ ; i++) {
            for (int j = 0 ; j < TAMANHO_MATRIZ ; j++) {
                matriz[i][j] = (int) (Math.random() * 20);
            }
        }
    // Imprime a matriz;
        System.out.println("Matriz");
        for (int i = 0 ; i < TAMANHO_MATRIZ ; i++) {
            for (int j = 0 ; j < TAMANHO_MATRIZ ; j++){
                if(j == TAMANHO_MATRIZ-1)
                System.out.print(matriz[i][j]+"\n");
                else
                    System.out.print(matriz[i][j]+"\t");
            }
        }
    
        System.out.println("");
        System.out.println(""+diagonalSecundaria(matriz));
    }
}

[list]O PROBLEMA

init:
deps-jar:
Compiling 1 source file to C:\1dois1dois\faculdade\revisao-u2-prova\build\classes
compile-single:
run-single:
Matriz
12 6 9
9 16 13
18 4 18

Elementos acima da diagonal
[color=red][I@addbf1[/color]
EXECUTADO COM SUCESSO (tempo total: 0 segundos)[/list]

O que há de errado para que a saida do programa seja essa doidera: [color=red][I@addbf1[/color] ?
:evil:

Provavelmente vc está tentando converter um objeto do tipo array em um objeto do tipo string.

Que tal imprimir cada elemento em separado?

[quote] Provavelmente vc está tentando converter um objeto do tipo array em um objeto do tipo string.

Que tal imprimir cada elemento em separado?[/quote]

:?: hum, em que momento esta havendo essa conversão indevida?

corri o teu codigo em modo Debug no eclipse e ele so imprime akela linha estranha k parece “feitiço” depois do

[/code]System.out.println(diagonalSecundaria(matriz)); [code]

diz k “edit source look up path”

String.Valueof(Object)—>notfound
PrintStream.println(Object)–> notfound

para evitar dar estas doideras…eu sempre defino duas classes uma com os metodos e outra com a main…
isso de coisas estaticas para depois chamar a main () logo em baixo as vezs dá nessas loucuras…

Mas vejo isso depois Do Jantar…

[quote] para evitar dar estas doideras…eu sempre defino duas classes uma com os metodos e outra com a main…
isso de coisas estaticas para depois chamar a main () logo em baixo as vezs dá nessas loucuras… [/quote]

Vou tentar isso.

[code]import static java.lang.System.*;

public class Programa {

static int[] diagonalSecundaria(int mmatriz[][]) {  
       
		int cont=0;  
			int diag[] = new int[3];  
       
				for (int i = 0 ; i < mmatriz.length - 1 ; i++) {  
						for (int j = 1 ; j < mmatriz.length ; j++) {  
								diag[i] = mmatriz[i][j];  
										cont++;     
         }  
     }  
     return diag;  
 }  


public static void main(String[] args) { 
	int TAMANHO_MATRIZ = 3;  
					int nmatix[][] = new int[TAMANHO_MATRIZ][TAMANHO_MATRIZ];  

//inicializa a matriz;
for (int i = 0 ; i < TAMANHO_MATRIZ ; i++) {

for (int j = 0 ; j < TAMANHO_MATRIZ ; j++) {
nmatix[i][j] = (int) (Math.random() * 20);
}
}
// Imprime a matriz;
System.out.println(“ALkamavo Help”);
for (int i = 0 ; i < TAMANHO_MATRIZ ; i++) {
for (int j = 0 ; j < TAMANHO_MATRIZ ; j++){
if(j == TAMANHO_MATRIZ-1)
out.print(nmatix[i][j]+"\n");
else
out.print(nmatix[i][j]+"\t");
}
}

}
}[/code]

agora esta funcionando como deve ser…

estas duas linhas marotas estavam lixando tudo

[code]#

System.out.println("");

System.out.println(""+diagonalSecundaria(matriz)); [/code]

Com a modificação do código feita por ‘ALkamavo’ a mensagem estranha não apareceu, correto. Mas as duas linhas system.out que foram apagadas tinham o objetivo de imprimir na tela os elementos acima da diagonal secundaria, por este motivo aquela mensagem estranaha não aparece.
No caso, eu quero que os elementos da diagonal principal seja armazenado no vetor diag[] e exibidos na tela.

Tentei fazer a chamada atraves da linha

...
System.out.println(""+x.diagonalSecundaria(matriz));
...

mas tá dando zebra. Como posso fazer para que os ementos acima da diagonal principal que foram armazenados no vetor diag[] seja exibido na tela?

[quote]O PROBLEMA

init:
deps-jar:
Compiling 1 source file to C:\1dois1dois\faculdade\revisao-u2-prova\build\classes
compile-single:
run-single:
Matriz
12 6 9
9 16 13
18 4 18

Elementos acima da diagonal
[I@addbf1 EXECUTADO COM SUCESSO (tempo total: 0 segundos)[/quote]

Ah, agora sei que o codigo estranho [color=red][I@addbf1 [/color] é o endereço de memória onde estar armazenado o vetor criado pela função diagonaSecundaria(). Agora me resta saber como ler este conteúdo, provavelmente terei de usar um for. Mas não sei ainda… não consegui

Objetivo do programa: Passar uma matriz como parametro para uma função e inserir os elementos acima da diagona secundaria em um vetor.

No inicio estava tendo problemas para exibir o vetor com os elementos da diagonal secundaria criado na função diagonalSecundaria(). Esta me retornando o endereço de memória do vetor e não os elementos do vetor.
Para solucionar o problema criei um vetor auxiliar chamado diagSec, que recebe o endereço de memoria e apos isso criei um for para exibir os elementos do vetor. Enfim Resolvido! :lol:

[code]package questao03;

public class Programa {

static int[] diagonalSecundaria(int mmatriz[][]) {
    
    int aux=1;
    int cont = 0;
    
    final int TAMANHO_VETOR = 3; // tamanho do vetor criado na função (depende da ordem da matriz);
    int diag[] = new int[TAMANHO_VETOR];
    
    for (int i = 0 ; i < mmatriz.length - 1 ; i++) {
        for (int j = 0 ; j < mmatriz.length - aux ; j++) {
            diag[cont] = mmatriz[i][j];
            cont++;
        }
        aux++;
    }
    return diag;
}

// --------------------- main ------------------------

public static void main(String[] args) {
    
    final int TAMANHO_MATRIZ = 3;
    int matriz[][] = new int[TAMANHO_MATRIZ][TAMANHO_MATRIZ];
    int diagSec[];

// inicializa a matriz;
for (int i = 0 ; i < TAMANHO_MATRIZ ; i++) {
for (int j = 0 ; j < TAMANHO_MATRIZ ; j++) {
matriz[i][j] = (int) (Math.random() * 20);
}
}
// Imprime a matriz;
System.out.println(“Matriz”);
for (int i = 0 ; i < TAMANHO_MATRIZ ; i++) {
for (int j = 0 ; j < TAMANHO_MATRIZ ; j++){
if(j == TAMANHO_MATRIZ-1)
System.out.print(matriz[i][j]+"\n");
else
System.out.print(matriz[i][j]+"\t");
}
}

    System.out.print("Elementos acima da diagonal secundaria: ");
    diagSec=diagonalSecundaria(matriz);
    for (int i = 0 ; i < diagSec.length; i++){
        System.out.print(diagSec[i]+"\t");
    }
}

}
[/code]

Na linha 50-53 desse novo código é onde esta o detalhe!!!

valeu a ajuda ai moçada.

Não é nenhum endereço de memória, é a apenas a referencia na qual está apontando!