运行代码:
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是什么以及如何防止它?
答案 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]
抛出此异常表示已尝试将错误类型的对象存储到对象数组中。
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);
}