【发布时间】:2012-11-17 22:00:48
【问题描述】:
这听起来可能很奇怪,但过去 2 天我一直在努力解决这个错误。
我在 java 中有一个
boolean数组,它是使用Random布尔生成器初始化的。之后,
boolean数组由 C 中的函数(使用 JNI 调用)执行,修改后的boolean数组返回给 java。当我将boolean数组交给C 时,它会转换为unsigned char 并转换回jbooleanArray,然后再交给java。-
现在我运行以下代码(i 上有一个 for 循环):
if(chosen_packet[i] == false) { pkt.first[i] = 0; System.out.print(chosen_packet[i]); } if(chosen_packet[i] == true) { pkt.first[i] = 1; System.out.print(chosen_packet[i]); }
问题是,有时当chosen_packet[i] 是true 时,它仍然没有进入第二个if 条件。有时会发生这种情况,有时代码工作得很好。当我在这种情况下打印chosen_packet[i] 时,它会打印为true,但它不会进入第二个if 条件。 boolean 数组看似损坏的可能原因是什么?
编辑:这就是我在 C 中将 boolean 数组转换为 unsigned char 的方法:
jboolean *element = (*env)->GetBooleanArrayElements(env,chosen_packet,0);
for(j = 0; j < sz; j++)
src_pkt[j] = (unsigned char)element[j];
此 src_pkt 被执行,然后我将其转换回 jboolean 。
EDIT2:这就是我将 unsigned char 数组转换回 jboolean 的方式:
jbooleanArray arr = (*env)->NewBooleanArray(env,sz);
(*env)->SetBooleanArrayRegion(env,arr,0,sz,src_pkts);
(*env)->DeleteLocalRef(env,arr);
【问题讨论】:
-
当
chosen_packet[i]是true时,为什么你期望你的第一个 if 执行? -
你确定 selected_packet 的类型是 Boolean[] 吗?或布尔[]
-
@RohitJain 我已经编辑了这个问题。有一个小错误。对此我深表歉意。
-
@fredcrs selected_packet 是 boolean[] 类型。 Boolean[] 和 boolean[] 有什么区别?
-
您如何将其转换回来?通过投射
(jboolean) src_pkt[j]?因为我认为那可能是错误的。
标签: java arrays if-statement java-native-interface boolean