有沒有一種簡單的方法來檢查沒有循環java中的字節數組是否具有全部0xFF值?檢查字節數組是否都在0xff
例如
byte[] b = new byte[]{ 0xff, 0xff, 0xff, 0xff, 0xff };
if (b is all 'ff')
process?
有沒有一種簡單的方法來檢查沒有循環java中的字節數組是否具有全部0xFF值?檢查字節數組是否都在0xff
例如
byte[] b = new byte[]{ 0xff, 0xff, 0xff, 0xff, 0xff };
if (b is all 'ff')
process?
如果你不喜歡的循環,使用遞歸:)
public static void test1() {
class Chk {
boolean c(int [] b, int val, int pos) {
if (pos >= b.length) {
return true;
}
if (b[pos] != val) {
return false;
}
return c(b, val, pos + 1);
}
}
Chk test = new Chk();
System.out.println(test.c(new int [] {0xff, 0xff}, 0xff, 0));
System.out.println(test.c(new int [] {0xff, 0xff, 0xff, 0xfe}, 0xff, 0));
System.out.println(test.c(new int [] {0x01, 0x01, 0x01, 0x01}, 0xff, 0));
System.out.println(test.c(new int [] {0x01, 0x01, 0x01, 0x01}, 0x01, 0));
}
但遞歸只是變相循環! (就像循環只是變相的遞歸!) –
這取決於你如何定義循環:) – DRCB
有沒有辦法做到這一點在任何語言中沒有循環(顯式或遞歸)。即使你的CPU有一個特殊的指令來檢查一個模式的內存區域,它也會在內部循環。所以你的問題沒有意義。
如果你問一個有效的方式做到這一點,也有辦法:
如果你的數組總是有相同的長度,你可以設置一個常數,並使用Arrays.equals()
。如果你有幾種不同的長度,但只有少數不同的長度,你可以創建幾個常量。
您可以對數組進行排序並檢查第一個和最後一個值。如果它們相同,則所有值之間的值也必須爲-1。
您可以將支票移動到方法中,這意味着「檢查循環」不會在重要的地方混亂代碼。
您可以使用JNI訪問彙編代碼,然後使用特殊指令。
其他語言提供更好的支持這樣的事情。在Groovy中,你可以做b.size() == b.count { it == -1 }
瘋狂的想法,你可以用字符串匹配做
int[] b = new int[]{0xff, 0xff, 0xff, 0xff, 0xff};
String arr = Arrays.toString(b).replaceAll(", ", "");
String match = "\\[("+new Integer(0xff).toString()+")+\\]";
System.out.println(arr);
System.out.println(match);
System.out.print(arr.matches(match));
井c您不需經過...哦..是的,這是Java的:)遺憾的是,我不認爲這是可能的(類似願望清單項目的+1)。 –
沒有循環?沒有!! – WickeD
@JacoVanNiekerk:你如何在C中不使用循環?我能想到的唯一方法是需要「b」是固定大小的「小」。 –