arrayindexoutofbounds异常处理

时间:2014-11-13 14:40:16

标签: java arrays processing

我已经学习了2个月的Java,并且我正在尝试根据每3秒出现在屏幕中间的许多proyectiles的创建来编写游戏。 我想知道是否有人可以检查我的代码中发生了什么,因为我真的不知道该怎么做,而且我无法在其他类似的问题中找到解决问题的方法。

[编辑1]:我更新了循环的退出。

int  num_proyect_act = 0;

float [] proyectil = new float [3];

float [] posX = new float [num_proyect_act];

float [] posY = new float [num_proyect_act];

float [] vX = new float [num_proyect_act];

float [] vY = new float [num_proyect_act];

int [] radix = new int [num_proyect_act];

int tiempo;

int intervalo = 3;

void setup () {
    tiempo = millis()/1000;
}

void draw () {
    if (((millis()-tiempo)/1000) > intervalo) {
        posX[num_proyect_act] = width/2;
        posY[num_proyect_act] = height/2;
        vY[num_proyect_act] = mouseY-height/2;
        vX[num_proyect_act] = mouseX-width/2;
        radix[num_proyect_act] =int(random(10, 60));
        num_proyect_act++;
      }
      println (millis()/1000);

      //meter aqui el calculo del tipo de proyectil

      for (int i= 0; i> num_proyect_act; i++) {

        dibujar_proyectil(i);
        comprovar_lim(i);
        modificar_pos(i);
      }
 }

void dibujar_proyectil(int _i){

float r= random (10, 40);
ellipse(posX[_i], posY[_i], r, r);

}

3 个答案:

答案 0 :(得分:0)

您可能正在创建长度为0的数组。

int  num_proyect_act = 0;
int [] radix = new int [num_proyect_act];

这似乎也令人怀疑。

for (int i= 0; i> num_proyect_act; i++) {

你可能意味着:

for (int i= 0; i < num_proyect_act; i++) {

答案 1 :(得分:0)

此代码可能存在问题:

  for (int i= 0; i> num_proyect_act; i++) {

    dibujar_proyectil(i);
    comprovar_lim(i);
    modificar_pos(i);
  }

除非num_proyect_act小于零,否则不会超出此范围。如果它确实执行它将永远运行或直到你退出它或抛出异常,因为如果我大于num_provect_act并且你每循环增加一个,它将始终大于num_provect_act(直到你至少溢出)

但你的阵列超出范围的例外可能来自这里:

    posX[num_proyect_act] = width/2;
    posY[num_proyect_act] = height/2;
    vY[num_proyect_act] = mouseY-height/2;
    vX[num_proyect_act] = mouseX-width/2;
    radix[num_proyect_act] =int(random(10, 60));

您已将这些数组创建为size_proyect_act。 Java中的数组索引从0开始并转到size-1。所以这些都超出了数组的范围。

答案 2 :(得分:-1)

检查for循环的退出条件:

for (int i= 0; i> num_proyect_act; i++) {
    // ...
}