2016-02-10 97 views
-4

我正在編寫一個程序來計算漢明碼,並且我收到一個數組越界異常。這個問題似乎是用這種方法:無法解決java.lang.ArrayIndexOutOfBoundsException

static int[] computeParityBits(int[] inWord, int[] parityBits) { 
for (int i=0, m=2; m < inWord.length; i++) { 
    m = (int) Math.pow(m, i); 
    parityBits[i] = processPower(m, inWord); 
} 
return parityBits; 

整數m不改變其使用就可以了Math.pow功能時的價值。我嘗試了不同的東西,但我似乎無法使其正常工作。只要它們的值低於int[] inWord.length,該方法應該通過2的所有權力。在此之後,它應該分配parityBits[i]由方法processPower()返回的值。

異常收到:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 at hamming_code.HammingCoder.computeParityBits(HammingCoder.java:34) at hamming_code.HammingCoder.computeHammingCode(HammingCoder.java:27) at hamming_code.HammingCoder.main(HammingCoder.java:61)

代碼的較大部分:

static int[] computeHammingCode(int[] inWord, int codeLength) { 
    int[] parityBits = new int[codeLength - inWord.length]; 
    parityBits = computeParityBits(inWord, parityBits); 
    return parityBits; 
} 

static int[] computeParityBits(int[] inWord, int[] parityBits) { 
    for (int i=0, m=2; m < inWord.length; i++) { 
     m = (int) Math.pow(m, i); 
     parityBits[i] = processPower(m, inWord); 
    } 
    return parityBits; 
} 

static int processPower(int m, int[] inWord) { 
    int counter = 0; 
    for (int i = 0; i < inWord.length; i++){ 
     for (int n = 0; n < m; n++) { 
      counter = counter + inWord[i]; 
     } 
     for (int k = 0; k < m; k++) { 
      i++; 
     } 
    } 
    if (counter % 2 == 0) { 
     return 0; 
    } else 
     return 1; 
} 
+4

當i = 5時,m小於inWord,但parityBits數組只有4個項。這是拋出異常。 – zgc7009

回答

0

錯誤信息表明它沒有爲i = 5,但你的循環的條件是的m價值,所以事情是不對您的循環。

印刷im每次迭代高達i = 5值會顯示錯誤:

for (int i=0, m=2; i <= 5; i++) { 
    m = (int) Math.pow(m, i); 
    System.out.println(i + ": " + m); 
} 

OUTPUTIdeone

0: 1 
1: 1 
2: 1 
3: 1 
4: 1 
5: 1 

正如你所看到的,m被總是1

這是因爲第一次迭代計算:

i=0,m=2: 2⁰ = 1 
i=1,m=1: 1¹ = 1 
i=2,m=1: 1² = 1 
i=3,m=1: 1³ = 1 
i=4,m=1: 1⁴ = 1 
i=5,m=1: 1⁵ = 1 

調試你的代碼應該很容易地向您展示這一點,比這裏得到答案更快。

+0

謝謝,我明白了現在的錯誤。剛開始學習如何編碼,所以感謝您的幫助和耐心! – MapleSyrup

-1

我看到什麼能阻止我超過codeLength - inWord.length。這將解釋例外。

-1

你得到因爲拳頭錯誤迭代你有Math.pow(m, 0);,它等於1。然後m將永遠是1,因爲功率的1始終爲1所以i遞增,但m沒有。但退出循環條件m < inWord.length