数组索引超出范围认为有一个特定的行

时间:2014-04-23 00:27:27

标签: java

线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:100在ham.main(ham.java:34)

我的控制台上的第34行说是if(h [c] == 1)

我写了一个代码来生成汉明码。我得到了javaindexoutbounds异常..我甚至给了荒谬的大数组大小来反击...仍然无法正常工作! 即使你有足够的空间用于阵列

,阵列也是出界的

第27行可能是一个错误......检查c

 import java.util.*;

public class ham {
public static void main(String ar[]) {
    Scanner s = new Scanner(System.in);
    System.out.println("input no. of bits");
    int n = s.nextInt();
    int a[] = new int[100]; // user's input
    int h[] = new int[100]; // hamming code array
    System.out.println("i/p the data");
    int i = 1, j = 1, pb = 1;
    for (i = 1; i < n + 1; i++)
        a[i] = s.nextInt();
    i = 1;

    while (i < n + 1) {
        if (j == pb) // if the index is a parity bit leave it
        {
            j++;
            pb = pb * 2;
        } else {
            h[j] = a[i];
            j++;
            i++;
        } // else copy the data bits from a[] to h[]
    }

    int c = 0, counter = 0; // to fill the parity bits(k)
    for (int k = 1; k <= j; k = 2 * k) {
        c = k;
        while (c <= j) // 'j' is position of the last data bit in h[]
        {
            for (c = k; c < (c + k); c++) {
                if (h[c] == 1)   // this is line 34
                    counter++;
            }
            c = c + k + 1;
        }
        if (counter % 2 == 0)
            h[k] = 0;
        else
            h[k] = 1;
    }
    System.out.println("hamming code is");
    for (i = 1; i <= j; i++)
        System.out.print(h[i] + " ");
}

}

1 个答案:

答案 0 :(得分:0)

if (h[c] == 1)测试导致异常。

您的h数组的固定大小为100,但c的最大值似乎取决于用户的输入n。您需要弄清楚如何动态确定数组大小,具体取决于用户输入。