“线程中的异常”;“主要”;java.lang.ArrayIndexOutofBounds异常:1?

“线程中的异常”;“主要”;java.lang.ArrayIndexOutofBounds异常:1?,java,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(ang

所以,我已经学习这个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;
            }
你们能帮我一下吗

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

arr.length
现在将等于3,我的数组在3处没有索引,而是在
0
1
2
处有索引

您将获得一个
arrayindexoutofbounds异常
,因为您正在初始化大小为0
shot
数组:

public static Projectile[] Shoot = new Projectile[0];
因此,呼吁

Shoot[0].x += VectorX(Shoot[0].speed, Shoot[0].angle);

循环中的无效。

您对
射击
数组的定义创建了长度为0的数组:
射击=新射弹[0]

但是,当您迭代数组时,您设置的循环变量的边界不正确:


用于(int i=1;我认为错误来自数组大小为0的事实。但我非常确定我正在增加大小?您是否尝试过调试器?学习经验是非常宝贵的。在每一步编写输入和预期输出,在某个时候,您应该看到光明。这是程序员的每一天-不要外包但是,成为一名优秀的程序员没有捷径。注释:1)你有严重的风格问题。你有以大写字母开头的方法。你有名称以大写字母开头的变量/字段。主要缺点。2)“我试图重写一些旧代码以使用向量…”:如果你是说
Vector
,然后应该使用
ArrayList
Vector
是一个遗留类,具有您(可能)不需要的同步开销。我会尝试一下。谢谢正如Sparta所指出的,您的数组被定义为具有
0
大小。现在,这个循环将永远不会运行,因为
0!<0
。好的,它一秒钟前还在运行,但现在我遇到另一个错误:
for(inti=0;I
if(Shoot[I].x>0&&Shoot[I].x<190&&Shoot[I].y>0&&Shoot[I].y<190&&Shoot[I].Player==true)c.drawString(攻击,射击[I].x,射击[I].y)
Null指针异常。嗯,我想这也是一个问题。我认为OutOfBound异常来自for循环中的
=
——通过我的更改,异常将消失,他的循环将被跳过,因为正如你所说,它的大小为0。你可能是对的。他应该尝试一下。
int[] arr = new int[]{ 0, 1, 2 };
public static Projectile[] Shoot = new Projectile[0];
Shoot[0].x += VectorX(Shoot[0].speed, Shoot[0].angle);