Qual seria o erro?

6 respostas
F

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

6 Respostas

P

Eh q res eh um ponteiro… entaum o q ele tah imprimindo na linha

System.out.println&#40;"Resultado&#58;" + res&#41;;

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

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

Abs

F

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

P

troca a linha

System.out.println&#40;"Resultado&#58;" + res&#41;;

por

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

senão vai continuar mostrando errado msm…

Abs :wink:

F

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]);

<a href="//System.out.println">//System.out.println</a>(“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

P

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;","&#41;;
F

Agora sim.

Muito Obrigada,

Flávia

Criado 29 de abril de 2005
Ultima resposta 29 de abr. de 2005
Respostas 6
Participantes 2