我正在做一个任务,根据速度和角度来计算轨迹,在计算中遇到了一些错误,我不知道如何解决。该程序的工作方式如下:使用nextInt()方法将文本文件中的值读入2个int数组。这些数组被传递到一个类,其中有calculateTrajectory方法,并被组合成一个2D数组。这些都是int数组。在calculateTrajectory中,合并为2D数组后,我随后计算了轨迹,但是在计算中出现错误。
我得到的错误的描述:
[当我遍历2D数组进行计算时,在对速度值使用Math.pow方法时遇到一个错误。该错误表明“ Math类型的方法pow(double,double)不适用于参数(int [],int)”。建议将速度类型更改为两倍。我需要将值转换为双精度吗?
计算的第二个错误是当我尝试在toRadians内将角度乘以2时出现的。我在这里得到的错误是“运算符*对于参数类型int,int []未定义”。这里没有快速修复建议。我查询了此错误,看到的所有答案都令人困惑。
我曾尝试使我的数组变成双重数组,但无济于事。我想知道在填充2D数组时是否可以将int数组的值转换为double值,是否可以解决问题。
public void calculateTrajectory(int[][] speed, int[][] angles)
{
//convert speed and angles arrays into one 2D array
for(int row = 0; row < speed.length; row++)
{
for(int col = 0; col < angles.length; col++)
{
combined[row] = speed[row];
combined[col] = angles[col];
}
}
//calculate the trajectory from 2D array
for(int r = 0; r < speed.length; r++)
{
for(int c = 0; c < angles.length; c++)
{
trajectory = (Math.pow(speed[r], 2)) *
Math.sin(Math.toRadians(2 * angles[c])) / 32.1713;
trajectoryArray[r] = trajectory;
}
}
}
我知道,根据公式,计算得出的结果将是我的两倍。我设置为用于计算结果的变量是双精度型。我希望能够无错误地运行计算,同时循环遍历并用结果填充我的trajectoryArray。
问题
Math.pow(double,double)接受2个double参数。但是这里speed [r]是一个数组,因为speed是一个二维数组,而2是一个整数。您应该使用speed [r] [c]。对于int 2,您可以说2.0。
Math.toRadians(double)需要一个双精度值,但2 * angles [c]不是一个双精度值,由于angles [c]是一个数组,因此无法计算,因为angles是一个二维数组。你可以做2.0 * angles [r] [c]
speed[r]
是一个数组; speed[<something>][<something>]
是一个数字(在这种情况下为int
,但会自动转换为double
)。您无法使用Math.pow
获取阵列的幂。第二个问题是相同的,只是angles
数组。在这两种情况下,您都需要指定two索引。