2013-05-30 115 views
0

我有以下代碼:表達式必須是列表類型錯誤?

public class Testcode { 


private static final Long[] P = new Long[18]; 


public void setKey(string key) 
{ 
integer i, j, k; 
long data; 
integer N = 16; 
string[] keytemp = new string[]{}; 
keytemp.add(key); 

// Initialize P and S. 
for (i = 0; i < N + 2; ++i){ 
    P[i] = Pinit[i]; 
    } 

    // XOR the key into P. 
j = 0; 
for (i = 0; i < N + 2; ++i) 
    { 
    data = 0; 
    for (k = 0; k < 4; ++k) 
    { 
    data = (data << 8) | keytemp[j]; 
    ++j; 
    } 
    P[i] ^= data; 
    } 

}  

    private static final long[] Pinit = new Long[] { 
    604135516L, 2242044355L, 320440478L , 57401183L, 
    2732047618L, 698298832L, 137296536L , 3964563569L, 
    1163258022L, 954160567L, 3193502383L, 887688400L, 
    3234508543L, 3380367581L, 1065660069L, 3041631479L, 
    2420952273L, 2306437331L 
    }; 
} 

即時得到以下錯誤:

錯誤:編譯錯誤:OR操作者可以只在線路36列被應用到布爾表達式或整型或長的表達式18

這是在這一行:

data = (data << 8) | keytemp[j]; 

有另一種方式來寫這行代碼?

謝謝

回答

0

你想訪問關鍵變量的第j位?我不認爲Apex支持那樣的語法(使用索引)。 []運算符是爲數組保留的,所以這就是你得到的錯誤。

事實上,它甚至不是我認爲的運營商(http://www.salesforce.com/us/developer/docs/apexcode/Content/langCon_apex_expressions_operators_understanding.htm),只是寫入myList.get(index)的快捷方式。

再試一次換擋技巧吧?

Long key = 255; 

System.debug(key & (1 << 7)); // 128 
System.debug(key & (1 << 8)); // 0 
+0

好吧我犯了一個錯誤,關鍵必須是一個字符串,所以&或|不適用於字符串,不知道要使用什麼!,任何想法? – user2333346

+0

我編輯了我原來的帖子,我有一個不同的錯誤,這行代碼在Java中是可以期待的,因爲我可以將密鑰定義爲一個字節,但是我不能在這裏這樣做。有沒有另外一種方法來編寫這行代碼? – user2333346

相關問題