2015-02-06 22 views
0

下面是我想用來做計算並返回一個值的方法。方程式爲:L = T + R * p - b其中L,R,p和b將有一個下標(0-5)。 R是一個3x3矩陣,在另一個類中存儲/生成,p和b是6組(x,y,z)座標的數組。當程序運行時,L應該有6個總值,並且我選擇將它們存儲在一個數組中。Java:算術與數組(乘法,加法,減法)

我得到的第一個錯誤是當我沒有rotationMultiplyfor循環。相反,我有rotation*platformCoords。所以現在我已經擺脫了這個錯誤,我得到一個新的錯誤:「令牌上的語法錯誤」*「無效的AssignmentOperator」,對於rotation[i][j]*platformCoords[i]行以及另一個錯誤:運算符 - 對於參數類型double是未定義的,雙行[],行tLength + rotationMultiply - baseCoords;

我敢肯定,一旦我得到了照顧,會有更多的錯誤,所以如果你能預料到任何,並給我一個在哪裏我可以做更多的學習,我會很感激它。

這是我試圖編寫的一個程序,它有助於控制Stewart平臺。

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)你必須對標量值進行算術運算,所以你不能從double中減去一個矢量,而'baseCoords'基本上是一個矢量(一個數組)。 (c)什麼是'length []'? (d)您如何期望將算術(標量!)的結果賦值給一個向量? – RealSkeptic 2015-02-06 15:20:30

+0

所以我絕對認爲我是將操作「分配給」rotation [] [] * platformCoords []',但是你所說的一切讓我覺得我需要重新審視數學,因爲我認爲'tLength'也需要成爲一個矢量(我認爲這將是一個不變的標量值,但重讀這個數學使我思考方式不同)。 'length []'是平臺上每個腿需要的長度數組。最終,程序的另一部分迭代'length []'進行一些計算並輸出特定伺服需要旋轉的角度。 – 2015-02-06 15:38:55

+0

您還需要查看您的Java。如果'length'是一個變量的名字,'length []'是非法的。一組空括號僅在類型名稱後合法。分配是通過'='運算符或其任何簡短格式('+ =','/ ='等)完成的。您必須將算術運算的* result *賦值給標量變量。 – RealSkeptic 2015-02-06 15:43:03

回答

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'部分代碼只是爲了檢查發生了什麼,發生了什麼? – 2015-02-06 15:45:42

+0

@WilliamB。 println部分只是爲了檢查我是否得到輸出。答案絕非正確。我只是糾正了所有明顯的缺陷並編譯錯誤。我沒有檢查數學是否正確。 – jgroehl 2015-02-06 15:58:57