我正在尝试完成以下任务。
Java文件要求用户输入两个数字,其中两个数字都用于确定二维数组的行数和列数。
这两个数字被传递到本机方法中。
在本机方法中,基于从A到Z的随机字符创建数组的内容。
本机方法然后将生成的数组传递回Java文件。
Java文件然后显示数组的内容。
我已经编写了Java函数以及一些C代码。但是我的问题是如何获得数组的全长,因为它是2D数组。使用(*env)->GetArrayLength
只会得到行数!但是我不知道如何获取列数。
Java
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 ;
}
答案 0 :(得分:0)
首先请理解Java没有二维数组的概念。最好的近似值是一维数组的数组,但是在语言中没有任何东西可以对嵌套数组施加相同的长度。
第二,我相信您的工作包括以本机代码创建数组,而不仅仅是用随机内容填充数组。
我可能会将两个整数传递给本机方法,然后使用JNI函数NewObjectArray和NewCharArray创建数组数组,并用随机字符填充它。
本机方法会将这个数组返回给Java。
这里已广泛讨论了打印:Java - Best way to print 2D array?。