2013-02-01 3 views
0

그런 다음이 코드 수행 내 문제입니다배열 자바 : 90 (는 ArrayIndexOutOfBoundsException)

java.lang.ArrayIndexOutOfBoundsException 
    at com.astroplayerbeta.gui.eq.EqVisualizerCaptureAudio.getAmplitude(EqVisualizerCaptureAudio.java:90) 
    at com.astroplayerbeta.gui.eq.EqVisualizerCaptureAudio.onFftDataCapture(EqVisualizerCaptureAudio.java:67) 
    at android.media.audiofx.Visualizer$NativeEventHandler.handleMessage(Visualizer.java:484) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:130) 
    at android.app.ActivityThread.main(ActivityThread.java:3835) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:507) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622) 
    at dalvik.system.NativeStart.main(Native Method) 

:이있어

private int[] getAmplitude(byte[] fft) { 
     int[] amplitude = new int[fft.length/2-2] ; 
     for (int i = 2; i <= fft.length/2-2;i+= 2) { 
      for(int j=0;j<= fft.length/2-2;j++){ 
      amplitude[j]=(fft[i] * fft[i] + fft[i + 1] * fft[i + 1]);} 
     } 
     return amplitude; 

를?

fft [] 배열의 길이는 1024입니다. J에 대한 = 0 :

+0

문제는 다음과 같습니다. ** 어떤 행이 90 행입니까 **? 우리는 어떻게 알 수 있습니까? 모든 행은 배열을 처리하므로 모든 배열이 배열이 될 수 있습니다. 적어도 문제에 대한 합당한 정보를 제공해주십시오! – ppeterka

답변

1

내가 영어로 그 작성했다면 이제 3

당신이 그것을 것

for(int j=0;j<= fft.length/2-2;j++){ 
    amplitude[j]=(fft[i] * fft[i] + fft[i + 1] * fft[i + 1]); 
} 

fft.length/2-2 3. 다음 진폭이 크기의 배열입니다 말할 수 있습니다 3은 진폭 [j]에 무엇인가 넣는다. 그래서 값을 진폭에 넣으므로 크기가 3 인 배열이므로 ArrayIndexOutOfBoundsException이됩니다.

for(int j=0;j< fft.length/2-2;j++){ 
    amplitude[j]=(fft[i] * fft[i] + fft[i + 1] * fft[i + 1]); 
} 

에 (<에 변경된 <을 =) 라인을 변경하고 당신은 설정해야합니다.

또한 fft 및 for 루프와 유사한 문제가 있음을 유의하십시오.

+0

하지만 fft는 길이가 1024인데 어떻게 길이가 3 인 배열을 얻나요? 그것은 510이어야합니까? – Bel

+0

@Bel 버그가 무엇인지 보여주는 간단한 예제 .. 원래 질문에서 fft의 크기를 언급하지 않았습니다 :) – Oren

+0

감사합니다. – Bel