“线程中的异常”;“主要”;java.lang.ArrayIndexOutofBounds异常:1?
所以,我已经学习这个java课程好几个月了,在年底之前我被分配了一个项目。我试图重写一些旧代码来使用向量和数组,但是。。。我得到了主题标题错误。以下是相关代码:“线程中的异常”;“主要”;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
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);