线程中的异常" 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] + " ");
}
}
答案 0 :(得分:0)
if (h[c] == 1)
测试导致异常。
您的h
数组的固定大小为100
,但c
的最大值似乎取决于用户的输入n
。您需要弄清楚如何动态确定数组大小,具体取决于用户输入。