2013-07-20 49 views
-4

在我的應用程序中,我正在從手機sdCard中讀取一個PCM文件,然後我嘗試將fft應用到它。 我的問題是它不斷給我ArrayIndexOutOfBoundsException我不知道爲什麼!我不知道如何解決它。如果有人可以請告訴我如何擺脫這個例外,我真的很感激它!ArrayIndexOutOfBoundsException是什麼意思

這裏是日誌貓:

java.lang.ArrayIndexOutOfBoundsException: length=80; index=80 
    at edu.emory.mathcs.jtransforms.fft.DoubleFFT_1D.bluestein_complex(DoubleFFT_1D.java:1222) 
    at edu.emory.mathcs.jtransforms.fft.DoubleFFT_1D.complexForward(DoubleFFT_1D.java:192) 

這裏是我的代碼:

//FFT will start here 
int size2; 
File file = new File(filePath2); 
size2 = (int) file.length(); 
audioDataDoubles1 = new double[(int)(size2/2)]; 
audioDataDoubles1 =convertFloatsToDoubles (silenceRemovedSignal); 
fft.complexForward(audioDataDoubles1); 
// calculate power spectrum (magnitude) values from fft[] 
magnitude1 = new double[(int)(size2/2)]; 
for(int i = 0 ;i<magnitude1.length; i++) 
{ 
re1 = audioDataDoubles1[2*i]; 
im1 = audioDataDoubles1[2*i+1]; 
magnitude1[i]= Math.sqrt(re1*re1+im1*im1); 
} 
+0

這意味着你應該只能訪問你所承諾的邊界。不僅僅如此。 –

+0

長度爲80.記住索引從0開始。 – Raghunandan

+1

要了解異常的含義,請閱讀其文檔:http://docs.oracle.com/javase/6/docs/api/java/lang/ArrayIndexOutOfBoundsException.html –

回答

1

試試這個

for(int i = 0 ;i<magnitude1.length - 1; i++) 

你試圖訪問索引超出數組邊界。您的陣列具有索引0-79,並且您嘗試訪問索引80

+0

i試了一下,但它給了我一個新的異常:java.lang.ArrayIndexOutOfBoundsException:length = 1040;索引= 1040 – hana

+0

異常最初在fft.complexForward(audioDataDoubles1); – hana

0

Array(和Collection)索引是基於0的。

java.lang.ArrayIndexOutOfBoundsException意味着你以某種方式訪問​​索引長度XArrayX,而可以訪問的最後一項是在長度索引 - 1.

0

java.lang.ArrayIndexOutOfBoundsException意味着你以某種方式訪問長度爲x的Array的索引x,而您可以訪問的最後一項索引爲x - 1

所以在循環現在我注意到你正在使用

re1 = audioDataDoubles1[2*i]; 
im1 = audioDataDoubles1[2*i+1]; 

你有沒有檢查audioDataDoubles1.length >= 2*magnitude1.length + 1。檢查一下嗎?