枚举数组抛出 ArrayStoreException

Enum Array throwing ArrayStoreException

import java.util.Arrays;
import java.util.Random;

enum Pebble
{
    X,O,EMPTY;
}

public class Board 
{
private int count;


private Pebble[][] array;

public Board(int n)
{
    array = new Pebble[n][n];
    Arrays.fill(array, Pebble.EMPTY);     
}...

当我创建一个 n x n 元素的对象时,它抛出一个 ArrayStoreException。我的数组充满了枚举常量,因此它应该是枚举类型。问题是什么?

当我实例化对象时出现这些错误:

 Board b = new Board(6);

run:
Exception in thread "main" java.lang.ArrayStoreException: board.Pebble
 at java.util.Arrays.fill(Arrays.java:3130)
 at board.Board.<init>(Board.java:28)
 at board.Tester.main(Tester.java:18)

Java 结果: 1

Array.fill 期望用 Pebble[] 个实例填充您的 array,而不是 Pebble 个实例。

您可以分别填充数组的每一行:

Arrays.fill(array[i], Pebble.EMPTY);

因此,要填充整个二维数组,请使用循环:

for (int i=0; i < array.length; i++)
    Arrays.fill(array[i], Pebble.EMPTY);

勾选 docs:

Thrown to indicate that an attempt has been made to store the wrong type of object into an array of objects.

您正在尝试用类型为 PebblePebble.EMPTY 填充数组。但是预期的类型是 Pebble[].

您可以这样做:

for (Pebble[] pbl: array)
    Arrays.fill(pbl, Pebble.EMPTY);

我强烈建议在遇到 Java 异常时查看文档,它们通常非常详细和解释。