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。我该怎么办?
答案 0 :(得分:1)
字节用Java签名,范围为-128
至127
。当j
达到最大值127
并递增时,该值溢出并变为-128
。因为您的索引为负,所以i
仍为0
。
为防止这种情况,请将j
的数据类型从byte
更改为int
。没有充分的理由将j
设为byte
;无论如何,数组索引表达式和数学表达式都会提升为int
。这也将允许j
到达256
,以便循环将终止。