Bom dia pessoal!!
Estou tentando interagir um código em Java com um código em C++, através do JNI.
Vejam o código em Java:
/*
- Colecao.java
-
- Created on April 28, 2005, 8:46 AM
*/
class Colecao {
public static native int[] average(int[] num);
public static void main(String args[]) {
Colecao c = new Colecao();
int array[]={1,2,3,4,5};
int[] res= c.average(array);
System.out.println(“Resultado:” + res);
}
static {
System.loadLibrary(“colecao”);
}
}
Vejam o código em C++:
#include “Colecao.h”
JNIEXPORT jintArray JNICALL Java_Colecao_average
(JNIEnv *env, jobject obj, ,jintArray num)
{
jsize len = env->GetArrayLength(num);
for( int i=0 ; i < len ; i++) {
return num;
}
Neste caso está sendo passado o array do código em Java e C++ recebe este array e retorna. Com isso o resultado deveria ser:
Resultado: 1,2,3,4,5
Só que veja o que está retornando:
Resultado:[I@17182c1
O que tem de errado neste código , que não está capturando o array ?
Muito Obrigada,
Flávia
Eh q res eh um ponteiro… entaum o q ele tah imprimindo na linha
System.out.println("Resultado:" + res);
eh provavelmente o endereço de memória do array…
Faz um for pra mostrar o conteúdo de res… 
Abs
Tentei fazer o For, mas olha o que deu.
Ai vai o código.
class Colecao {
public static native int[] average(int[] num);
public static void main(String args[]) {
Colecao c = new Colecao();
int array[]={1,2,3,4,5};
int[] res= c.average(array);
for (int i=0; i< res.length;i++){
System.out.println(“Resultado:” + res);
}
}
static {
System.loadLibrary(“colecao”);
}
}
Olha o resultado:
Resultado:[I@17182c1
Resultado:[I@17182c1
Resultado:[I@17182c1
Resultado:[I@17182c1
Resultado:[I@17182c1
Obrigada,
Flávia
troca a linha
System.out.println("Resultado:" + res);
por
System.out.println("Resultado:" + res[i]);
senão vai continuar mostrando errado msm…
Abs 
Obrigada, assim funcionou.
Só que estou querendo colocar o resultado em uma linha só, veja o que fiz:
class Colecao {
public static native int[] average(int[] num);
public static void main(String args[]) {
Colecao c = new Colecao();
int array[]={1,2,3,4,5};
int[] res= c.average(array);
System.out.print(“Resultado: " );
for(int i = 0; i < res.length; i++) {
System.out.print(”,");
System.out.print(res[i]);
//System.out.println(“Resultado:” + res[i]);
}
}
static {
System.loadLibrary(“colecao”);
}
}
Coloquei o resultado para fora do FOR.
Veja o resultado:
Resultado: ,1,2,3,4,5
Por que está aparecendo esta vírgula antes do número 1?
Obrigada,
Flávia
Por causa do seu código
for(int i = 0; i < res.length; i++) {
System.out.print(",");
System.out.print(res[i]);
//System.out.println("Resultado:" + res[i]);
}
Se não quiser q aparece uma ‘,’ sobressalente, vais ter q fazer um controle (pode ser um if)…
if(i>0) System.out.println(",");