我工作的一個遊戲,我需要轉換成二進制我區塊ID設置爲switch語句,所以我可以抓住從精靈表正確的瓷磚。如何在java中正確執行二進制開關語句?
我需要轉換該名單中包含了所有可能的磚我需要從255層到只有48個左右的瓷磚成整數,我可以用它來得到我的區塊ID。
我能得到首發這一說法一些幫助?
另外一個X意味着什麼並不重要位被設置在那裏。
編輯:還應該說,這是一個8位數字DCBA4321
我工作的一個遊戲,我需要轉換成二進制我區塊ID設置爲switch語句,所以我可以抓住從精靈表正確的瓷磚。如何在java中正確執行二進制開關語句?
我需要轉換該名單中包含了所有可能的磚我需要從255層到只有48個左右的瓷磚成整數,我可以用它來得到我的區塊ID。
我能得到首發這一說法一些幫助?
另外一個X意味着什麼並不重要位被設置在那裏。
編輯:還應該說,這是一個8位數字DCBA4321
我電子書籍創造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];
}
我建議你學習Java的位運算符:Click Here
class BitDemo {
public static void main(String[] args) {
int bitmask = 0x000F;
int val = 0x2222;
// prints "2"
System.out.println(val & bitmask);
}
}
一旦你屏蔽值,你可以確定正確的瓷磚來抓取。
我仍然在使用switch語句嗎? – Snhp9
最快的方法除非你有從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
....
我會嘗試下面這個和下面的幾個並測試性能。因爲看起來有很多方法可以做到這一點。在這一點上學習很多。 :) – Snhp9
看起來很有趣,看起來確實很快。那麼硬編碼值中的下一行是 21 21 24 24 16 16 30 30? 下一行怎麼樣? 1 1 1 1 3 3 3 3? – Snhp9
在答案中增加了兩行。您有一個方便的「低位總和」列,它提供了哪些4321值應映射到目標值的提示。例如,「0-3,8-11」意味着我們應該有8行:位置0-3和位置8-11。 –
從現在開始做得完美謝謝!我會嘗試這個和另一種方法,看看它是如何結果。 – Snhp9