我有一个二维数组:
private BigInteger[][] keysArray = new BigInteger[2][128];
密钥生成器:
public BigInteger keyGenerator(int k) {
SecureRandom srandom = new SecureRandom();
BigInteger bg = new BigInteger(k, srandom);
return bg;
}
和这个方法:
public void setKeysArray() {
Arrays.fill(keysArray, keyGenerator(k));
}
我得到了java.lang.ArrayStoreException
但我不明白为什么。
答案 0 :(得分:0)
我认为你存在大问题的问题。你有传递整数而不是大整数。
当程序试图在数组中存储不兼容类型的元素时抛出。
答案 1 :(得分:0)
当您执行
时,您正在声明一个数组数组private BigInteger[][] keysArray = new BigInteger[2][128];
意味着你有两个128 BigIntegers数组。
如果你想完全填写矩阵,你应该像你一样打电话给Arrays.fill(keysArray, keyGenerator(k));
,但要两次;每个阵列都有一次。
答案 2 :(得分:0)
考虑像new BigInteger[2][128]
这样的二维数组的这种“解释”:
BigInteger [数组数] [每个数组中有多少元素]
这意味着,您尝试将BigInteger
存储在需要数组的位置。当Arrays.fill
尝试分配BigInteger
类型的值时,这会产生ArrayStoreException
。
在setKeysArray
方法中,您需要使用索引BigInteger
和0
分别引用和填充两个1
数组:
Arrays.fill(keysArray[0], keyGenerator(k));
Arrays.fill(keysArray[1], keyGenerator(k));
之后你有两个阵列,每个阵列持有相同的BigInteger
128次。一切都很好,如果那就是你想要的。
答案 3 :(得分:0)
因为keysArray
是一个二维数组,这意味着它是一个包含其他数组的数组,因此Arrays.fill(keysArray, keyGenerator(k));
将不起作用。
相反,您必须填写单个keysArray
元素,如下所示:
for(int i= 0; i < keysArray.length;i++) {
Arrays.fill(keysArray[i], keyGenerator(k));
}