【问题标题】:arrayindexoutofbounds exception processing [closed]arrayindexoutofbounds 异常处理[关闭]
【发布时间】:2014-11-13 14:40:16
【问题描述】:

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

[edit 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);

}

【问题讨论】:

  • 为更快的解决方案提供例外
  • 请发布堆栈跟踪并找出错误来自哪一行。
  • 您创建了多个空数组,然后尝试访问它们。因此,您的越界异常

标签: java arrays processing


【解决方案1】:

您可能正在创建长度为 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++) {

【讨论】:

    【解决方案2】:

    这段代码可能有问题:

      for (int i= 0; i> num_proyect_act; i++) {
    
        dibujar_proyectil(i);
        comprovar_lim(i);
        modificar_pos(i);
      }
    

    除非 num_proyect_act 小于零,否则不会执行。如果它确实执行,它将永远运行,或者直到您退出它或引发异常,因为如果 i 大于 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));
    

    您已将这些数组创建为大小为 num_proyect_act。 Java 中的数组索引从 0 开始,一直到 size-1。所以这些都超出了数组的范围。

    【讨论】:

    • 好的,我明白这个问题,但我真的不知道该怎么办,我的意思是我该如何解决这个问题,这是代码语法错误吗?
    • 您的数组是异常的来源。数组的长度为 0。因此,每当您尝试访问数组中的任何内容时,都会出现异常。更改数组的大小以避免这种情况。
    • 好的,我改变 num_proyect_act = 200;但我仍然期待,感谢您的耐心...
    • 再往下,您将使用 num_proyect_act 再次访问它。但是,如果您有一个长度为 num_proyect_act 的数组,那么最后一个元素位于位置 [num_proyect_act-1] 而不是 [num_proyect_act]。你必须改变它
    • 那我该怎么办?
    【解决方案3】:

    检查 for 循环的退出条件:

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

    【讨论】:

    • void dibujar_proyectil(int _i) { float r= random (10, 40);椭圆(posX[_i], posY[_i], r, r); }
    • 我不能投票:那不是我
    猜你喜欢
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    相关资源
    最近更新 更多