如何在 java 中正确执行二进制 switch 语句?

How can I correctly do a binary switch statement in java?

我正在开发一款游戏,我需要将我的二进制图块 ID 集转换为 switch 语句,以便我可以从精灵中获取正确的图块 sheet。

我需要将包含我需要的所有可能图块的列表从 255 个转换为仅 48 个左右的图块,并将其转换为可用于获取我的图块 ID 的整数。

我可以得到一些关于开始这个声明的帮助吗?

还有一个 x 表示在那里设置什么位并不重要。

编辑:还应该说这是一个 8 位数字 DCBA4321

我建议您学习 Java 的位运算符:Click Here

class BitDemo {
  public static void main(String[] args) {
    int bitmask = 0x000F;
    int val = 0x2222;
    // prints "2"
    System.out.println(val & bitmask);
  }
}

屏蔽该值后,您可以确定要抓取的正确图块。

我建议为每个可能的组合创建一个包含 256 个值的静态数组,如下所示:

static final int[] DCBA4321_TO_VALUE = {
    // 0000
    47, 44, 36,343, 37, 14, 35, 32, 45, 34, 15, 40, 42, 41, 33, 38,
    // 0001
    28, 28, 27, 27, 26, 26, 23, 23, 28, 28, 27, 27, 26, 26, 23, 23, 
    // 0010
    21, 21, 21, 21, 24, 24, 24, 24, 16, 16, 16, 16, 30, 30, 30, 30,
    // 0011
     1,  1,  1,  1,  3,  3,  3,  3,  1,  1,  1,  1,  3,  3,  3,  3, 
    ...
};

有了这样的数组,您可以简单地使用移位连接您的 DCBA 和 4321 值,并将其添加并映射到值。这对我来说似乎是最快的方法

int getValue(int DCBA, int num) {
    return DCBA4321_TO_VALUE[(DCBA << 4)+num];
}

除非您有从 dcba4321 到目标值的数学公式,否则您将必须执行如下操作。我已将其分成子部分以帮助支持可读性和维护。

byte dcba = dcba4312 & 0b11110000 >> 4
byte _4321 dcba4321 & 0b00001111;

switch (dcba) {
case 0b0000:
  return dcba0(_4321);
case 0b001:
  return dcba1(_4321);
...
  rest of the dcba cases;
...
}

dcba0(byte _4321) {
  switch (_4321) {
    case 0:
      return 47;
    case 1:
      return 44;
    ....
      rest of the cases
    ....
  }
}

....
rest of the dcbaX methods
....