Несоответствие типов для Math.pow и неопределенный оператор - Java - PullRequest
0 голосов
/ 28 сентября 2019

Я работаю над заданием для расчета траектории на основе скорости и углов, и я получаю пару ошибок в своих расчетах, которые я не понимаю, как исправить.Программа работает следующим образом: считывает значения из текстового файла в 2 массива int с помощью метода nextInt ().Эти массивы передаются в класс, где используется методcellTrajectory, и объединяются в двумерный массив.Это все массивы int.В CalculateTrajectory, после объединения в 2D-массив, я затем вычисляю траекторию, но получаю ошибки в моем вычислении.

Описание ошибок, которые я получаю:

Когда я перебираю 2D-массив, чтобы выполнить мои вычисления, я получаю одну ошибку при использовании метода Math.pow на моемзначение скорости.Эта ошибка говорит о том, что «метод pow (double, double) в типе Math не применим для аргументов (int [], int)».Совет состоит в том, чтобы изменить тип скорости в два раза.Нужно ли приводить значения к двойным значениям?

Вторая ошибка в вычислениях возникает, когда я пытаюсь умножить углы на 2 внутри toRadians.Я получаю здесь ошибку «Оператор * не определен для типа (ов) аргументов int, int []».Здесь нет быстрых советов.Я искал эту ошибку, и любые ответы, которые я видел, действительно сбивают с толку.

Я пытался сделать мои массивы двойными, но безрезультатно.Мне интересно, смогу ли я преобразовать значения массивов int в double при заполнении 2D-массива, если это решит проблему.

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 результатами.

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Для вопроса

  1. Math.pow (double, double) принимает 2 двойных аргумента.Но здесь скорость [r] - это массив, так как скорость - это двумерный массив, а 2 - целое число.Вы должны использовать скорость [r] [c].для int 2 можно сказать 2,0.

  2. Math.toRadians (double) требует двойного значения, но 2 * angles [c] не является двойным значением и не может быть рассчитано как углы [c] - это массив, поскольку angles - это двумерный массив.Вы можете сделать 2,0 * углы [r] [c]

1 голос
/ 28 сентября 2019

speed[r] - массив;speed[<something>][<something>] - это число (int в этом случае, но оно будет автоматически преобразовано в double).Вы не можете получить мощность массива, используя Math.pow.Вторая проблема такая же, только с массивом angles.В обоих случаях вам нужно указать два индекса.

...