【问题标题】:Using arrays in enums Java在枚举 Java 中使用数组
【发布时间】:2018-01-17 07:09:24
【问题描述】:

我的 Java 作业的一部分要求我创建一个枚举,它代表四种不同类型的 掩码(形状),它们覆盖了游戏板的方格。面具的尺寸为 3x3,缺少一些 3x3 方块的方块(这些方块不会隐藏游戏板上的方块)。

1 0 1  //you can think of the 0's as missing squares, and the 1's as the mask
1 1 1
1 1 0

现在我想使用像int[][] 这样的数组将一个二进制矩阵附加到四个唯一掩码中的每一个上,如下所示:

public enum Mask {
    W([[1,1,0],[1,1,1],[1,0,1]]),
    X([[1,0,1],[1,0,1],[1,1,1]]),
    Y([[0,1,1],[1,1,1],[1,1,0]]),
    Z([[1,0,1],[1,1,1],[1,0,1]]);

当我尝试这样做时,我的 IDE 变得非常不高兴,所以我确定我在理解枚举/数组时遗漏了一些东西。

我猜我无法初始化枚举中的数组或类似的东西?

如何实现这个想法?

【问题讨论】:

    标签: java arrays enums


    【解决方案1】:

    当我尝试这样做时,我的 IDE 变得非常不高兴

    是的,那是因为你给数组错误..

    你不能这样做:

    W([[1,1,0],[1,1,1],[1,0,1]]),
    

    无效并且编译器不知道您正在“尝试传递”一个数组作为参数,最后您只是试图将一个数组作为参数(在您的情况下是一个匿名数组),所以您有使用形式的语法

    W(new int[] { 1, 1 });
    

    请参阅下面的示例作为方向点:

    enum Mask {
        W(new int[] { 1, 1 });
        private final int[] myArray;
    
        private Mask(int[] myArray) {
            this.myArray = myArray;
        }
    
    }
    

    【讨论】:

    • ++ 留给 OP 做而不是做整个作业。
    • 你打败了我几秒钟,但我想为 OP 添加:枚举只是一个类,具有声明它的实例的额外能力。你可以用它做任何你可以用类做的事情。声明构造函数、字段、方法等...
    • 是否可以在枚举参数之外实例化数组,而不是直接引用它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 2011-05-11
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多