繁体   English   中英

JNI维数组:将2D数组从Java传递到C

[英]JNI dimensional array: passing 2D array from java to c

我正在尝试完成以下任务。

  • Java文件要求用户输入两个数字,其中两个数字都用于确定二维数组的行数和列数。

  • 这两个数字将传递给本机方法。

  • 在本机方法中,基于从A到Z的随机字符创建数组的内容。

  • 然后,本机方法将生成的数组传递回Java文件。

  • 然后,Java文件显示数组的内容。

我已经编写了Java函数以及一些C代码。 但是我的问题是如何获得数组的全长,因为它是2D数组。 使用(*env)->GetArrayLength我只得到行数! 但是我不知道如何获取列数。

爪哇

import java.util.Scanner;

class Array { 
int num1, num2; 
native void DArray(char[][] Arr);

static { System.loadLibrary("CArray");}

public static void main(String args[]) { 
Scanner inp = new Scanner(System.in); 
Array obj = new Array();
System.out.printf("Enter the Number of rows: "); obj.num1 = inp.nextInt();
System.out.printf("Enter the shape <number>: "); obj.num2 = inp.nextInt();
char Arr[][] = new char[obj.num1][obj.num2];
obj.DArray(Arr);
}
}

C代码(JNI)

#include <jni.h> 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

JNIEXPORT void JNICALL Java_Array_DArray (JNIEnv *env, jobject obj, jcharArray arr){

jsize len =(*env)->GetArrayLength(env, arr);

jchar Arr[len];
        for (int i=0;i<len;i++){
        Arr[i] = (rand()%26)+65;
        }       

        for (int i=0;i<len;i++){
            printf("%c""%c",Arr[i],' ');
        }       
return ;
}

首先请理解Java没有二维数组的概念。 最佳近似是一维数组的数组,但是在语言中没有任何东西可以对嵌套数组强制使用相同的长度。

其次,我相信您的工作包括以本机代码创建数组,而不仅仅是用随机内容填充数组。

我可能会将两个整数传递给本机方法,然后使用JNI函数NewObjectArray和NewCharArray创建数组数组,并用随机字符填充它。

本机方法会将这个数组返回给Java。

打印已在此处广泛讨论: Java-打印2D数组的最佳方法?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM