线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:1?

时间:2015-12-18 01:02:20

标签: java

所以,我几个月来一直在做这个java课程,并且在今年年底之前我已经被分配了一个项目。我正在尝试重写一些旧代码以使用向量和数组,但是......我得到主题标题错误。以下是相关代码:

public static double VectorX(int len, double angle) {
      return Math.cos(angle)*len;
}
public static double VectorY(int len, double angle) {
      return Math.sin(angle)*len;
}
public static class Projectile {
    public int x;
    public int y;
    public double angle;
    public int speed;
    public boolean Player;
}

...

public static Projectile[] Shoot = new Projectile[0];

public static double RadianAngle(int x1, int y1, int x2, int y2) {
      return Math.atan2(x2-x1, y2-y1);
    }

...

for (int i = 1; i <= Shoot.length; i++)
        {
            Shoot[i].x += VectorX(Shoot[i].speed, Shoot[i].angle);
            Shoot[i].y += VectorY(Shoot[i].speed, Shoot[i].angle);
        }

...

if (Cooldown == 75 || Cooldown == 25)
            {
                Projectile Hey = new Projectile();
                Hey.x = EX;
                Hey.y = EY;
                Hey.Player = false;
                Hey.speed = 2;
                Hey.angle = RadianAngle(Hey.x, Hey.y, X, Y);
                Projectile[] Shoot2 = new Projectile[Shoot.length + 1];
                for (int l = 0; l <= Shoot.length - 1; l++)
                {
                    Shoot2[l] = Shoot[l];
                }
                Shoot2[Shoot2.length - 1] = Hey;
                Shoot = Shoot2;
            }

我不知道发生了什么事。我从我精通的基于C#的语言中导入了这些Vector函数,但是将它们翻译成了java。我在

收到错误
            Shoot[i].x += VectorX(Shoot[i].speed, Shoot[i].angle);
            Shoot[i].y += VectorY(Shoot[i].speed, Shoot[i].angle);

你们能帮我一把吗?

3 个答案:

答案 0 :(得分:0)

for (int i = 1; i <= Shoot.length; i++)

应该是

for (int i = 0; i < Shoot.length; i++)

原因

int[] arr = new int[]{ 0, 1, 2 };

arr.length现在等于3,我的数组没有3的索引,相反,它的索引位于012

答案 1 :(得分:0)

您收到ArrayIndexOutOfBoundsException,因为您正在初始化大小为 0 Shoot数组:

public static Projectile[] Shoot = new Projectile[0];

所以打电话给

Shoot[0].x += VectorX(Shoot[0].speed, Shoot[0].angle);
循环中的

无效。

答案 2 :(得分:0)

您对shoot数组的定义会创建一个长度为0的数组:Shoot = new Projectile[0];

然而,当您遍历数组时,您正在错误地设置循环变量的边界:

for (int i = 1; i <= Shoot.length; i++)

数组是零索引的(意味着长度为1的数组将具有索引[0]而不是更多)。因此,开始循环索引为1(int i = 1)是不好的开始。 然后你循环太远了。假设你的数组中有3个元素,索引将是0,1和&amp; 2.你的array.length将是3,但你永远不想索引3 。因此,您的循环条件必须为< array.length,而不是<= array.length