如何使用 2 个 1d 数组中的整数填充 2d 数组



我有 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 <numAngles我会检查这些属性以确保您不会尝试访问大于这些数组大小的元素。例如,如果您有以下情况:>

double array = {0.0}; 
int numSpeeds = 1; 
int trajectory = array[numSpeeds]; 

会导致错误,因为"数组"中的位置 1 没有元素(因为数组从 0 开始索引(。这可能是一个 off by 1 错误,在这种情况下,我建议修改 forloops 条件以解决此错误。例如,将现有代码更改为:

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);
    }           
} 

最新更新