2015-11-16 124 views
0

我怎樣才能更優雅判斷一個JavaCard的字節數組只包含一個特定的元素作爲顯示在下面的例子:如何知道一個數組只包含的所有元素的特定值

{(byte) 0xAA, (byte) 0xAA, (byte) 0xAA, (byte) 0xAA} 

我試圖不編寫循環和if-else來搜索整個數組並匹配它是否僅包含特定元素(上面的示例中爲0xAA)。有什麼方法可以做到嗎?

+0

你的意思是喜歡用查找表? – TheRealChx101

+0

是的。我試圖實現一個查找數組。我想知道整個數組是否填充了特定的特定元素。 – thotheolh

+0

好的。檢查我的答案。 – TheRealChx101

回答

2

Java Card是一個非常有限的平臺,幾乎沒有花哨的庫。循環和if-else/break通常是你可以做的最好的事情,這樣做沒有錯。


如果陣列有一個固定的(或限制)的大小,您可以創建一個RAM緩存器並使用Util類和它的靜態方法與字節的值來填充它,然後在一塊全陣列式比較:

private final byte[] temp = JCSystem.makeTransientByteArray(SIZE_LIMIT, JCSystem.CLEAR_ON_DESELECT); 
private final boolean containsSameValues(final byte[] arr, final byte value) 
{ 
    if (arr.length > SIZE_LIMIT) { 
     //throw some error code... 
    } 
    Util.fillArrayNonAtomic(temp, (short) 0, (short) arr.length, value); 
    return Util.arrayCompare(arr, (short) 0, temp, (short) 0, (short) arr.length) == 0; 
} 

但是,這種解決方案可能比普通環路更慢。一切都取決於你的硬件和你的Java Card實現。

+0

如果僅搜索模式的數量有限(例如檢查正確的填充),則可以在applet安裝期間預先準備好所有數組(在持久內存中,因爲它非常便宜)然後調用'Util.arrayCompare()'。 – vlp

+0

並且非常喜歡這個想法,即如果被測數組的大小有一定的上限,那麼可以使用該長引用數組,並只檢查被測數組的實際長度(在回答中會多加強調一下) - 使用它自己零填充檢查(即使在C中)。 – vlp

相關問題