Java while循环随机崩溃

Java while循环随机崩溃,java,loops,if-statement,while-loop,Java,Loops,If Statement,While Loop,我有一个代码,基本上是按自定义顺序运行数组。 我已经包含了一段代码片段,说明了我的错误。出于某种原因,Java有时会在8上给我一个arrayoutofboundsexception,但据我所知,while循环和之前的if语句应该会阻止它达到8。有人能给我解释一下变量val不时达到8的原因吗 int size = 16; done = new boolean[size/2]; int val = (int)(Math.random()*255); int a = 0; if ((size/2)&l

我有一个代码,基本上是按自定义顺序运行数组。 我已经包含了一段代码片段,说明了我的错误。出于某种原因,Java有时会在8上给我一个arrayoutofboundsexception,但据我所知,while循环和之前的if语句应该会阻止它达到8。有人能给我解释一下变量val不时达到8的原因吗

int size = 16;
done = new boolean[size/2];
int val = (int)(Math.random()*255);
int a = 0;
if ((size/2)<val)
  val=0;
while (done[val+a]) {
  a++;
  if ((val+a) > (int)(size/2)){
    val=0;
    a=0;
  }
}
done[val+a]=true;
int size=16;
完成=新布尔值[size/2];
int val=(int)(Math.random()*255);
int a=0;
如果((尺寸/2)(内部)(尺寸/2)){
val=0;
a=0;
}
}
完成[val+a]=真;

再次检查。如果val正好为8,则您的情况:

if ((size/2)<val)

<代码>如果(大小/ 2)似乎已经做了这个技巧,但是我的问题变成为什么它在C++上没有问题?在我的头脑中,也许是C的数学。随机是唯一的,即[0,1 ],而java的是包容的[0,1]。但是,我不确定。
if ((size/2)<=val)