我有 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]]
这个二维数组通过嵌入式循环填充我缺少什么?
快速回答,每个循环后都有一个分号;
。
for (i = 0; i < numSpeeds; i++) ;
这是一个空语句的循环,只是增加了i
.将其更改为
for (i = 0; i < numSpeeds; i++)
还建议在for
内声明变量,如
for (int i = 0; i < numSpeeds; i++)
如果分号存在,这将导致错误。
编辑:还请考虑@user2004685和@Jason建议的要点 - 使代码更加健壮和可重用!
根据我从上面显示的代码中能够辨别出来,我的最佳猜测是:row.length 这可能会解决您的问题。请注意,这不是这个问题的决定性答案,因为这完全取决于行和列的长度,以及它们是否分别超过数字速度和数字角度。private static void Trajectory(double[] row, double [] col)
{
trajectory = new int[numSpeeds][numAngles];
int i = 0, j = 0;
for (i = 0; i < numSpeeds - 1; i++);
{
for (j = 0; j < numAngles - 1; j++);
{
trajectory [i][j] = (int) ((row[i] * col[j]) / 9.8);
}
}
System.out.println(Arrays.deepToString(trajectory));
}
当我运行此代码时,出现错误:
线程"main"中的异常 java.lang.ArrayIndexOutOfBoundsException: 16
这可能是因为行数组的长度小于 numSpeeds,或者 col 数组的长度小于 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);
}
}