java.lang.ArrayIndexOutOfBoundsException: 3 Fehler
Habe ich das folgende Stück code, für die bin ich immer java.lang.ArrayIndexOutOfBoundsException
//divides ACode by 10 as many times as specified by the DecimalDigitPosition
public static int getDecimalDigit(int ACode, int decimalDigitPosition) {
if (decimalDigitPosition == 0)
return ACode;
else {
ACode = ACode / (10 * decimalDigitPosition);
int remainder = ACode % 10;
return remainder;
}
}
Ich bin zu Ahnen dieser Linie...
digit[i] = getDecimalDigit(samples[i].getValue(), 0);
in der folgenden code könnte das der Grund für diese Ausnahme.
//start a method to decode the message.
public static void decodeMessage(String filename) {
Sound s = new Sound(filename);
SoundSample[] samples = s.getSamples();
int[] digit = new int[3];
String message = "";
int sampleIndex = 0;
boolean nullReached = false;
while (!nullReached) {
int asciiValue = 0;
for (int i = sampleIndex; i < sampleIndex + 3; i++) {
if (i < samples.length) {
//this line could be the cause of error..
digit[i] = getDecimalDigit(samples[i].getValue(), 0);
asciiValue += digit[i - sampleIndex] * (((i - sampleIndex) == 0)
? 1
: ((i - sampleIndex) * 10));
} else {
for (int j = 0; j < 3; j++) {
digit[j] = 0;
}
break;
}
}
if (digit[0] == digit[1]
&& digit[1] == digit[2]
&& digit[2] == 0)
nullReached = true;
message += (char) asciiValue;
}
}
Stack trace:
java.lang.ArrayIndexOutOfBoundsException: 3 at
Projekt.decodeMessage(Projekt.java:107) an
Projekt.main(Projekt.java:33) at
Sonne.reflektieren.NativeMethodAccessorImpl.invoke0(Native Method) at
Sonne.reflektieren.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
bei
Sonne.reflektieren.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
bei java.lang.reflektieren.Methode.invoke(Method.java:597) at
edu.Reis.cs.drjava.Modell.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
>
- Welche Linien werfen diese Fehler? Kannst du den stacktrace?
- Wenn Sie denken, dass das problem durch einen bestimmten Abschnitt des Codes, ist es normalerweise am besten, nur um diesen Teil 🙂
- Hier ist der Fehlercode: java.lang.ArrayIndexOutOfBoundsException: 3 at Projekt.decodeMessage(Projekt.java:107) im Projekt.main(Projekt.java:33) at sun.reflektieren.NativeMethodAccessorImpl.invoke0(Native Method) bei sun.reflektieren.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflektieren.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflektieren.Methode.invoke(Method.java:597) at edu.Reis.cs.drjava.Modell.compiler.JavacCompiler.runCommand(JavacCompiler.java:272) >
- und Tyler, du hast Recht haha ich bin mir nicht denken. Bearbeiten von code jetzt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist wahrscheinlich hier in Ihrem
decodeMessage
Methode. Ich habe geschnippelt, einige code, um das problem einzugrenzen:Zweiten mal durch Ihre
while
SchleifesampleIndex
wird3
, soi
startet am3
. Sie versuchen dann dereferenzierendigit[i]
, das wäredigit[3]
. Dadigit[]
ist einint[3]
, danndigit[3]
außerhalb der Begrenzungen des Arrays.Vielleicht möchten Sie dies tun, statt: