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

时间:2019-02-10 21:13:39

标签: java arrays

我有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数组通过嵌入式循环填充时我缺少什么?

3 个答案:

答案 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

university

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

UniversityName

哪个可以解决您的问题。请注意,这不是最终的解决方案,因为这完全取决于row和col的长度,以及是否分别被numSpeeds和numAngles超过。

答案 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-使代码更健壮且可重复使用!