Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试填充浮点数组时出现ArrayStoreException_Java_Exception - Fatal编程技术网

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++中的语义是相同的(向量的向量),只是图书馆正好有它的直接支持。