2015-02-06 4 views
0

Ниже приведен метод, который я хочу использовать для расчета и возврата значения. Уравнение: L = T + R * p - b, где L, R, p и b будут иметь индекс (0-5). R - матрица 3x3, которая хранится/генерируется в другом классе, p и b - массивы из 6 наборов координат (x, y, z). При запуске программы L должно иметь 6 общих значений, и я решил сохранить их в массиве.Java: арифметика с массивами (умножение, сложение, вычитание)

Первой ошибкой, которую я получил, было то, что у меня не было rotationMultiply или петель for. Вместо этого у меня было rotation*platformCoords. Итак, теперь, когда я избавился от этой ошибки, я получил новую ошибку «Синтаксическая ошибка на токене« * », недействительный AssignmentOperator» для строки rotation[i][j]*platformCoords[i] и еще одна ошибка. Оператор - не определен для типов аргументов double, double [], для строки tLength + rotationMultiply - baseCoords;.

Я уверен, что будет больше ошибок после того, как я получу тех, о которых позаботились, поэтому, если вы можете предвидеть их и дать мне хедз-ап, где я могу сделать еще несколько уроков, я бы это оценил.

Это одна часть программы, которую я пытаюсь написать, что поможет контролировать платформу стюарда.

public class LiCalc { 

double length[]; 

public double legLength(double tLength, double[][] rotation, double[] platformCoords, double[] baseCoords){ 

    double rotationMultiply; 

     for (int i = 0; i < 3; i++){ 
      for (int j = 0; j < 3; j++){ 
       rotation[i][j]*platformCoords[i]; 
       return rotationMultiply; 
      } 
     }  

    length = tLength + rotationMultiply - baseCoords; 

    return length[]; 

} 

}

+0

В основном (а) Вы не можете сделать арифметическую операцию, не назначая его на что-то * *. Вот почему возникает первая ошибка. (b) Вы должны сделать арифметику по скалярным значениям, поэтому вы не можете вычесть вектор из двойника, а 'baseCoords' - это в основном вектор (массив). (c) Что такое 'length []'? И (d) как вы ожидаете присвоить вектор арифметической (скалярной!)? – RealSkeptic

+0

Итак, я определенно думал, что я «назначил» операцию 'rotation [] [] * platformCoords []', но все, что вы говорите, заставляет меня думать, что мне нужно пересмотреть математику, потому что я думаю, что 'tLength' также должно быть (я думал, что это будет постоянное скалярное значение, но перечитывать эту математику заставляет меня думать иначе). 'length []' - это массив длин, каждый из которых должен иметь 6 ног на платформе. В конечном счете, другая часть программы повторяется через 'length []' выполняет некоторые вычисления и выводит угол, который должен вращать определенный сервопривод. –

+0

Вам также нужно просмотреть свою Java. 'length []' является незаконным, если 'length' - это имя переменной. Пустое множество скобок является допустимым только после имени типа. И назначение выполняется с помощью оператора '=' или любого из его коротких форматов ('+ =', '/ =' и т. Д.). Вы должны присваивать * result * арифметической операции скалярной переменной. – RealSkeptic

ответ

0

Этот ответ отнюдь не математически 100% правильно. Я только что исправил все очевидные ошибки и ошибки компиляции.

Попробуйте следующий код и построить правильный ответ на него:

import java.util.Arrays; 

public final class LiCalc 
{ 

    private LiCalc() 
    { 

    } 

    public static double[] legLength(double tLength[], double[][] rotation, double[] platformCoords, double[] baseCoords) 
    { 

     double[] rotatedCoords = new double[platformCoords.length]; 

     for (int i = 0; i < 3; i++) 
     { 
      double rotatedValue = 0; 
      for (int j = 0; j < 3; j++) 
      { 
       rotatedValue += rotation[i][j] * platformCoords[i]; 
      } 
      rotatedCoords[i] = rotatedValue; 
     } 

     double[] length = new double[platformCoords.length]; 

     for (int i = 0; i < 3; i++) 
     { 
      length[i] = tLength[i] + rotatedCoords[i] - baseCoords[i]; 
     } 

     return length; 

    } 

    public static void main(String[] args) 
    { 
     System.out.println(Arrays.toString(LiCalc.legLength(new double[]{1, 0, 0}, 
       new double[][] { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } }, new double[] { 0, 1, 1 }, new double[] { 1, 
         0, 0 }))); 
    } 
} 
+0

Итак, если вы видите мой комментарий к @RealSkeptic, я думаю, что 'tLength' также должен быть массивом, и если я понимаю все, что вы написали, это не должно быть проблемой. И именно поэтому я понимаю, что ваша часть 'println' кода - это просто проверить, что произошло, что произошло? –

+0

@WilliamB. Часть println - это просто проверить, не получается ли я получить результат. Ответ отнюдь не правильный. Я только что исправил все очевидные недостатки и скомпилировал ошибки. Я не проверял правильность математики. – jgroehl

Смежные вопросы