Java 尝试填充浮点数组时出现ArrayStoreException
为什么下面的代码会引发异常,这意味着什么Java 尝试填充浮点数组时出现ArrayStoreException,java,exception,Java,Exception,为什么下面的代码会引发异常,这意味着什么 float[][] foo_array = new float[WIDTH][HEIGHT]; //Assume WDITH and Height are defined java.util.Arrays.fill(foo_array, Float.POSITIVE_INFINITY); 如您所见,我只是尝试在无穷远处初始化浮点数组,但这会导致以下异常: Exception in thread "LWJGL Application" com.badlo
float[][] foo_array = new float[WIDTH][HEIGHT]; //Assume WDITH and Height are defined
java.util.Arrays.fill(foo_array, Float.POSITIVE_INFINITY);
如您所见,我只是尝试在无穷远处初始化浮点数组,但这会导致以下异常:
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.lang.ArrayStoreException: java.lang.Float
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:113)
Caused by: java.lang.ArrayStoreException: java.lang.Float
at java.util.Arrays.fill(Arrays.java:2170)
当然,我可以遍历整个数组并将每个值设置为无穷大,我知道fill方法就是这样做的(否则它怎么工作)。但我只是好奇为什么这不起作用,这个例外是什么
编辑:我省略了异常消息的很大一部分,因为我不想这么长时间,而且它没有提供任何相关信息。根据
如果所分配的值的类型与组件类型不兼容(§5.2),则会引发ArrayStoreException
似乎您的distMap
引用不是float[]
,可能是一个无法工作的float[][]
,因为float[]
并不等同于float[][]
尝试使用正确的参数,如foo\u array[0]
,它可以工作:
float[][] foo_array = new float[10][10]; //Assume WDITH and Height are defined
java.util.Arrays.fill(foo_array[0], Float.POSITIVE_INFINITY);
System.out.println(Arrays.toString(foo_array));
还要看签名的方法
您需要遍历foo\u数组
,并设置每个foo\u数组[i]
。样本:
for(float[] floatArrays:foo_array) {
java.util.Arrays.fill(floatArrays, Float.POSITIVE_INFINITY);
}
这是一个很好的例子
foo_数组
是一个float[][
,这清楚地说明了尝试失败的原因:foo_数组
的元素类型是float[]
。Java的多维数组就是这样工作的:它们是数组的数组
要纠正您的问题,请迭代所有
float[]
类型的foo\u数组成员,并使用数组。对每个数组填充。似乎您应该使用此循环来完成您想要的操作:
for(int i = 0; i < foo_array.length; i++){
Arrays.fill(foo_array[i], Float.POSITIVE_INFINITY);
}
for(int i=0;i
您的代码将在java.util.Arrays中调用以下方法
公共静态空白填充(对象[]a,对象val){
对于(int i=0,len=a.length;i
a[i]=val;
}
因此,您的异常是意料之中的。填充distmap
与foo_数组有什么关系,以及distmap
的声明是什么?噢,对不起,foo_数组实际上是distmap,我只是更改了名称使其更通用,没有注意。请注意,float[][]不是float[]。这是一个对float[]的引用数组。好的,所以没有办法一次填充整个数组。非常感谢,我将遍历整个数组,因此我不依赖任何外部方法,因为我必须使用循环。对不起,我刚刚编辑了它。他们是同一件事,我只是改变了名字,使我的问题不那么具体。我的badSo无法填充整个多维数组?就像C++的向量v(高度、向量(宽度、填充值));没有内置的功能。你当然可以在公共图书馆中自己编写,或者在公共图书馆找到一个:我认为C++中的语义是相同的(向量的向量),只是图书馆正好有它的直接支持。