我有2个1d数组需要做一些数学运算,并用答案填充1个2d数组。
private static void Trajectory(double[] row, double [] col)
{
trajectory = new int[numSpeeds][numAngles];
int i = 0, j = 0;
for (i = 0; i < numSpeeds; i++);
{
for (j = 0; j < numAngles; j++);
{
trajectory [i][j] = (int) ((row[i] * col[j]) / 9.8);
}
}
System.out.println(Arrays.deepToString(trajectory));
}
运行此代码时,出现错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 16
at CatapultRunner.Trajectory(CatapultRunner.java:126)
at CatapultRunner.readingFile(CatapultRunner.java:100)
at CatapultRunner.main(CatapultRunner.java:38)
但是,当我要求一个数组的索引和另一个数组的索引,并告诉它将其放置在2d数组中的位置时,它确实执行了我想要的操作。
示例:
private static void Trajectory(double[] row, double [] col)
{
trajectory = new int[numSpeeds][numAngles];
int i = 0, j = 0;
for (i = 0; i < numSpeeds; i++);
{
for (j = 0; j < numAngles; j++);
{
trajectory [0][0] = (int) ((row[0] * col[0]) / 9.8);
}
}
System.out.println(" ");
System.out.println(Arrays.deepToString(trajectory));
}
输出:
[[10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
这个2d数组通过嵌入式循环填充时我缺少什么?
答案 0 :(得分:2)
运行此代码时,出现错误:
线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException: 16
这可能是因为行数组的长度小于 numSpeeds ,或者 col 数组的长度小于< strong> numAngles 。
您应按如下所示初始化轨迹数组,
trajectory = new int[row.length][col.length];
^ ^
* Notice the changes here.
编辑:正如@Jason正确指出的那样,您必须从 for 语句的末尾删除那些分号。
for (i = 0; i < numSpeeds - 1; i++) {
for (j = 0; j < numAngles - 1; j++) {
trajectory [i][j] = (int) ((row[i] * col[j]) / 9.8);
}
}
答案 1 :(得分:2)
根据我能从上面显示的代码中看到的内容,我的最佳猜测是:row.length 将导致错误,因为“数组”中位置1处没有元素(因为数组从0开始索引)。这可能是1错误,在这种情况下,我建议修改forloops条件以解决此错误。例如。将现有代码更改为: 哪个可以解决您的问题。请注意,这不是最终的解决方案,因为这完全取决于row和col的长度,以及是否分别被numSpeeds和numAngles超过。 university
UniversityName
答案 2 :(得分:2)
快速解答,每个循环后都有一个分号;
。
for (i = 0; i < numSpeeds; i++) ;
这是一个空语句的循环,只增加了i
。更改为
for (i = 0; i < numSpeeds; i++)
还建议像在
中那样在for
内声明变量。
for (int i = 0; i < numSpeeds; i++)
如果存在分号,则将导致错误。
编辑:请同时考虑@ user2004685和@Jason的the points suggested-使代码更健壮且可重复使用!