0

次のコードで例外が発生するのはなぜですか? また、それはどういう意味ですか?

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 メソッドが行うことであることはわかっています (それ以外の方法で機能する可能性があります)。しかし、なぜこれが機能しないのか、この例外は何なのかが気になります。

編集:これをそれほど長くしたくなく、関連する情報を提供していなかったため、例外メッセージの大部分を省略しました。

4

4 に答える 4

2

foo_arrayこれにより、試みがfloat[][]失敗した理由が明確になります。 is の要素タイプfoo_arrayですfloat[]。これが Java の多次元配列の仕組みです。これらは配列の配列です。

float[]問題を解決するには、型指定されたすべてのメンバーを反復処理し、それぞれに対してfoo_array使用します。Arrays.fill

于 2013-08-03T15:44:06.693 に答える
2

このループを使用して、必要なことを行う必要があるようです。

for(int i = 0; i < foo_array.length; i++){
   Arrays.fill(foo_array[i], Float.POSITIVE_INFINITY);
}
于 2013-08-03T15:47:26.790 に答える