获取列表的ArrayIndexOutOfBoundsException

时间:2018-09-11 22:36:25

标签: java arrays exception indexoutofboundsexception

public class pGen_Example {
    public static void main(String[] args) {
        long seed = 80;
        vGen(seed, (int) Math.pow(2, 32), 22695477, 1, 1);
    }
    private static void vGen(long x, long m, int a, int c, int p) {
        int area = (int) Math.pow(4, p-1);
        long y = 0;
        long[] tl = new long[area];
        double[] bl = new double[area*256];
        for(int i=0; i<area; i++) {
            x = (a*x+c)%m;
            tl[i] = x;
            for(byte j=0; j<256; j++) {
                if(j==0) y = (a*tl[i]+c)%m;
                else y = (a*y+c)%m;
                bl[256*i+j] = y;
            }
        }
    }
}

我试图将数字写入初始化为256个项目的列表中。运行代码后,我收到一个异常,告诉我bl [256 * i + j] = y的索引;已变为-128。我该怎么办?

1 个答案:

答案 0 :(得分:1)

字节用Java签名,范围为-128127。当j达到最大值127并递增时,该值溢出并变为-128。因为您的索引为负,所以i仍为0

为防止这种情况,请将j的数据类型从byte更改为int。没有充分的理由将j设为byte;无论如何,数组索引表达式和数学表达式都会提升为int。这也将允许j到达256,以便循环将终止。