Получение ArrayIndexOutOfBoundsException для списка - PullRequest
0 голосов
/ 12 сентября 2018
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 голосов
/ 12 сентября 2018

байты подписаны в Java с диапазоном от -128 до 127. Когда j достигает своего максимального значения 127 и увеличивается, значение переполняется и становится -128. Поскольку у вас отрицательный индекс, это означает, что i по-прежнему 0.

Чтобы предотвратить это, измените тип данных j с byte на int. Нет веской причины, по которой j должен быть byte; Выражения индекса массива и математические выражения повышаются до int при оценке в любом случае. Это также позволит j достичь 256, чтобы цикл завершился.

...