2016-04-12 15 views
0

Ich habe ein kleines Problem mit meinem Code. Ich habe versucht, Code von Python in Java umzuschreiben.Array-Index außerhalb der Grenzen Ausnahme -77

In Python ist es:

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

Dann habe ich versucht, es so in Java zu schreiben:

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); 
    } 

Alles für mich, gut zu sein scheint, aber wenn ich es kompilieren und es gibt eine Java .lang.ArrayIndexOutOfBoundsException: -77

Hat jemand eine Ahnung oder kann es besser umschreiben?

+1

'for (int index: data)' Warum denken Sie, dass Sie Indizes durch die Verwendung dieses nicht erhalten? Das ist falsch. Verwenden Sie stattdessen eine normale "for" -Schleife. – Tom

+0

@Tom Das ist eine ziemlich unhöfliche Art, ihm zu sagen, dass er eine falsche Syntax benutzt. @ czaro112112 verwenden Sie das 'for (int i = 0; i Kon

+0

@Kon Sie meinen *" Das ist eine ziemlich unhöfliche Art, ihm zu sagen, dass er offensichtlich inkorrekte Syntax verwendet, die durch ein paar Minuten der Forschung bekannt gewesen wäre. "*? Ich habe wirklich Mühe zu verstehen, warum viele neue Benutzer nicht nach verwendeter API oder Syntax recherchieren. Es ist enttäuschend. – Tom

Antwort

1

Eine for Schleife dieser Form (eine "erweiterte" für Schleife) ergibt die Werte des Arrays, nicht die Indizes. Der Wert -77 war der vorzeichenbehaftete Wert des byte, nicht der Index, daher die Ausnahme. Beachten Sie, dass Java, obwohl der Wert als byte extrahiert wurde, nur allzu bereit war, value implizit zu einem int zu erweitern, wie Sie es deklariert haben.

eine Standard for Schleife verwenden:

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

Danke, dass es jetzt funktioniert – czaro112112

+0

Als der Fragesteller dieser Frage, können Sie nach Ihrem Ermessen [genau eine Antwort akzeptieren] (http://stackoverflow.com/help/someone-answers), dass Sie denken, beantwortet die Frage am besten. – rgettman

1

Java for (a : b) Schleife Schleifen über Werte, nicht Indizes.

index ist eigentlich kein Index.

Verwandte Themen