Java无法创建简单的2d布尔数组

时间:2014-02-05 10:43:17

标签: java arrays exception multidimensional-array

运行代码:

    public static boolean[][] makeright(boolean tf, BufferedImage in){
        boolean[][] ret = new boolean[in.getWidth()][in.getHeight()];
        Arrays.fill(ret, tf);
        return ret;
    }

给了我一个

java.lang.ArrayStoreException: java.lang.Boolean
    at java.util.Arrays.fill(Arrays.java:2697)
    at neuro.helper.makeright(helper.java:35)
    at neuro.helper.main(helper.java:20)

异常,第35行是我创建boolean [] [] ret的行。 有谁知道ArrayStoreException是什么以及如何防止它?

3 个答案:

答案 0 :(得分:3)

没有Arrays.fill版本接受boolean[][]作为参数。请参阅文档here

当然,正如R.J.在评论中指出,只要您传递boolean[][]作为第二个参数,就可以传递boolean[]作为第一个参数。

答案 1 :(得分:2)

问题在于您尝试在二维数组上使用Arrays.fill()而不是一维。您可以通过循环2D数组中的单独(1维)数组来解决此问题。

public class Test {
    public static void main(String[] args){
        boolean[][] ret = new boolean[5][5];
        for(boolean[] arr : ret){
            Arrays.fill(arr, true);
        }

        for(boolean[] arr : ret){
            System.out.println(Arrays.toString(arr));
        }
    }
}

这将输出

[true, true, true, true, true]
[true, true, true, true, true]
[true, true, true, true, true]
[true, true, true, true, true]
[true, true, true, true, true]

请参阅ArrayStoreException

  

抛出此异常表示已尝试将错误类型的对象存储到对象数组中。

Arrays.fill(boolean[] a, boolean val)

  

将指定的布尔值分配给指定的布尔数组的每个元素。

您还可以使用更通用的public static void fill(Object[] a, Object val)传递一个布尔值数组,如下所示:

public static void main(String[] args) {
    boolean[][] ret = new boolean[5][5];
    boolean[] tofill = new boolean[] { true, true, true, true, true };

    Arrays.fill(ret, tofill);

    for (boolean[] arr : ret) {
        System.out.println(Arrays.toString(arr));
    }
}

答案 2 :(得分:0)

您正在尝试使用单个布尔值填充布尔数组数组,这将无效。相反,你必须做这样的事情:

for (int i = 0; i < ret.length; i++) {
   Arrays.fill(ret[i], tf);
}