2016-04-12 89 views
0

我的代碼有點問題。 我試圖從python重寫代碼到java。陣列索引超出範圍-77

在Python是:

data = bytearray(filesize) 
f.readinto(data) 

然後我試圖把它寫在Java這樣的:

try { 
     data = Files.readAllBytes(file.toPath()); 
    } catch (IOException ex) { 
     Logger.getLogger(Encrypter.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    for(int index : data) { 
     data[index] = (byte) ((byte) Math.pow(data[index], genfun((fileSize), index)) & 0xFF); 
    } 

一切都似乎是爲我好,但是當我編譯它,有一個java的.lang.ArrayIndexOutOfBoundsException:-77

有沒有人有線索或可以重寫更好?

+1

'爲(INT指數:數據)'爲什麼你認爲你可以使用此獲得指標?這是錯誤的。改爲使用常規的'for'循環。 – Tom

+0

@Tom這是一種非常粗魯的告訴他他使用的語法不正確的方式。 @ czaro112112使用'for(int i = 0; i Kon

+0

@Kon你的意思是*「這是一種非常粗魯的方式告訴他,他使用的語法顯然是不正確的,通過使用幾分鐘的研究就可以知道這個語法。」*?我真的很難理解爲什麼很多新用戶不會研究使用的API或語法。這是令人失望的。 – Tom

回答

1

A for此形式的循環(「增強」for循環)產生數組的而不是索引。值-77byte的有符號值,而不是索引,因此是例外。請注意,儘管該值被提取爲byte,但Java很樂意將value隱式擴展爲您聲明的int

使用標準for循環:

for (int index = 0; index < data.length; index++) 
{ 
    byte value = data[index]; 
    data[index] = (byte) (/* Your byte manipulation of value goes here */); 
} 
+0

感謝它現在的作品 – czaro112112

+0

作爲這個問題的提問者,根據您的判斷,您可以[接受一個答案](http://stackoverflow.com/help/someone-answers),您認爲這個問題最能回答問題。 – rgettman

1

Java的for (a : b)循環結束,而不是索引。

index實際上並不是索引。