所以,我几个月来一直在做这个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);
你们能帮我一把吗?
答案 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的索引,相反,它的索引位于0
,1
和2
。
答案 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
。