Math.pow的类型不匹配,并且运算符未定义-Java

问题描述 投票:-2回答:2

我正在做一个任务,根据速度和角度来计算轨迹,在计算中遇到了一些错误,我不知道如何解决。该程序的工作方式如下:使用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。

java arrays multidimensional-array java-10
2个回答
1
投票

问题

  1. Math.pow(double,double)接受2个double参数。但是这里speed [r]是一个数组,因为speed是一个二维数组,而2是一个整数。您应该使用speed [r] [c]。对于int 2,您可以说2.0。

  2. Math.toRadians(double)需要一个双精度值,但2 * angles [c]不是一个双精度值,由于angles [c]是一个数组,因此无法计算,因为angles是一个二维数组。你可以做2.0 * angles [r] [c]


1
投票

speed[r]是一个数组; speed[<something>][<something>]是一个数字(在这种情况下为int,但会自动转换为double)。您无法使用Math.pow获取阵列的幂。第二个问题是相同的,只是angles数组。在这两种情况下,您都需要指定two索引。

© www.soinside.com 2019 - 2024. All rights reserved.