Qual seria o erro?

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&#40;&quot;Resultado&#58;&quot; + res&#41;; 

eh provavelmente o endereço de memória do array…

Faz um for pra mostrar o conteúdo de res… :wink:

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&#40;&quot;Resultado&#58;&quot; + res&#41;;

por

System.out.println&#40;&quot;Resultado&#58;&quot; + res&#91;i&#93;&#41;;

senão vai continuar mostrando errado msm…

Abs :wink:

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&#40;int i = 0; i &lt; res.length; i++&#41; &#123; System.out.print&#40;&quot;,&quot;&#41;; System.out.print&#40;res&#91;i&#93;&#41;; //System.out.println&#40;&quot;Resultado&#58;&quot; + res&#91;i&#93;&#41;; &#125;

Se não quiser q aparece uma ‘,’ sobressalente, vais ter q fazer um controle (pode ser um if)…

if&#40;i&gt;0&#41; System.out.println&#40;&quot;,&quot;&#41;;

Agora sim.

Muito Obrigada,

Flávia