如何在JNI中填充二维数组中的值并将其作为对象数组返回?

时间:2010-12-13 04:16:41

标签: android java-native-interface

我正在尝试执行矩阵乘法,它涉及二维双数组。我在SUN网站上发表了一篇文章,但仍然无法做到正确。以下是我的问题及其处理方式的简要说明:

我有两个二维双数组,我从我的java函数传递给JNI。我将这些数组作为JObectArray传递。在我的JNI函数中,我创建了两个double类型的本地数组,并在这些本地数组中复制了JObjectArrays。然后我执行矩阵乘法并将结果存储在另一个名为result的本地数组中。 现在我想将这个结果数组返回给Java函数,但我不知道如何做到这一点 有人可以帮我解决一下我的疑问吗?

这是我的代码:

JNIEXPORT jobjectArray JNICALL Java_prj_anyapp_JNIForMFCC_compute(JNIEnv *env, jclass jClass, jint Am, jint Bm, jint Bn, jobjectArray A, jobjectArray B)
{

    jobjectArray retC;
    int i,j,k;
    double sum;
    int localAm, localBm, localBn;
    localAm = Am;
    localBm = Bm;
    localBn = Bn;
    double localArrayCopyB[localBm][localBn];       
    double localArrayCopyA[localAm][localBm];
    double localArrayCopyC[localAm][localBn];

    for(i=0; i<localAm; i++) {
        jdoubleArray oneDimA= 
        (jdoubleArray)(*env)->GetObjectArrayElement(env,A, i);

        jint *elementA = (*env)->GetIntArrayElements(env,oneDimA, 0);
        for(j=0; j<localBm; j++) {

            localArrayCopyA[i][j]= elementA[j];
        }


    for(i=0; i<localBm; i++) {
        jdoubleArray oneDimB= 
        (jdoubleArray)(*env)->GetObjectArrayElement(env,B, i);

        jint *elementB = (*env)->GetIntArrayElements(env,oneDimB, 0);
        for(j=0; j<localBn; j++) {

            localArrayCopyB[i][j]= elementB[j];
        }

    }

        for(i=0; i<localAm; i++){
            for(j=0; j<localBm; j++){
                for(k=0; k<localBn; k++){
                    sum += localArrayCopyA[i][k] * localArrayCopyB[k][j];
                }
                localArrayCopyC[i][j] = sum;
            }
        }
    }       
}

0 个答案:

没有答案