为什么我会得到ArrayStoreException?

时间:2015-11-22 11:58:08

标签: java arrays exception

我有一个二维数组:

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但我不明白为什么。

4 个答案:

答案 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方法中,您需要使用索引BigInteger0分别引用和填充两个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));
}