Java:带数组的算术(乘法、加法、减法)
下面是我想用来计算和返回值的方法。方程是:L=T+R*p-b,其中L、R、p和b将有一个下标(0-5)。R是一个3x3矩阵,存储/生成在另一个类中,p和b是6组(x,y,z)坐标的数组。当程序运行时,我总共应该有6个值,我选择将它们存储在一个数组中 我遇到的第一个错误是没有Java:带数组的算术(乘法、加法、减法),java,arrays,Java,Arrays,下面是我想用来计算和返回值的方法。方程是:L=T+R*p-b,其中L、R、p和b将有一个下标(0-5)。R是一个3x3矩阵,存储/生成在另一个类中,p和b是6组(x,y,z)坐标的数组。当程序运行时,我总共应该有6个值,我选择将它们存储在一个数组中 我遇到的第一个错误是没有rotationMultiply或for循环。相反,我使用了旋转*平台坐标。现在我已经消除了这个错误,我得到了一个新的错误“Syntax error on token”*,对于linerotation[I][j]*platfo
rotationMultiply
或for
循环。相反,我使用了旋转*平台坐标
。现在我已经消除了这个错误,我得到了一个新的错误“Syntax error on token”*,对于linerotation[I][j]*platformCoords[I]
和另一个错误,操作符-对于参数类型double,double[],对于linetlelength+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[];
}
公共类LiCalc{
双倍长度[];
公共双腿长(双腿长、双腿[]旋转、双腿[]平台坐标、双腿[]基线坐标){
双旋转倍增;
对于(int i=0;i<3;i++){
对于(int j=0;j<3;j++){
旋转[i][j]*平台坐标[i];
返回旋转乘法;
}
}
长度=t长度+旋转倍增-基准坐标;
返回长度[];
}
}这个答案在数学上绝对不是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 })));
}
}
导入java.util.array;
公共期末班
{
私人有限公司
{
}
公共静态双[]腿长(双[]腿长[],双[]旋转,双[]平台坐标,双[]基线坐标)
{
double[]rotatedCoords=新的double[platformCoords.length];
对于(int i=0;i<3;i++)
{
双旋转值=0;
对于(int j=0;j<3;j++)
{
rotatedValue+=旋转[i][j]*平台坐标[i];
}
rotatedCoords[i]=rotatedValue;
}
double[]长度=新的double[platformCoords.length];
对于(int i=0;i<3;i++)
{
长度[i]=t长度[i]+旋转坐标[i]-基坐标[i];
}
返回长度;
}
公共静态void main(字符串[]args)
{
System.out.println(Arrays.toString(LiCalc.legLength)(新的double[]{1,0,0},
新的双精度[]{{1,0,0},{0,1,0},{0,0,1}},新的双精度[]{0,1,1},新的双精度[]{1,
0, 0 })));
}
}
基本上(a)如果不将算术运算分配给某个对象,就不能进行算术运算。这就是第一个错误发生的原因。(b) 您必须对标量值进行算术运算,因此不能从双精度中减去向量,baseCoords
基本上是一个向量(数组)。(c) 什么是长度[]
?(d)你希望如何将算术(标量!)的结果分配给向量?所以我肯定认为我是在“分配”操作到rotation[]][]*platformCoords[]
,但你说的每一句话都让我觉得我需要复习数学,因为我认为t长度
也需要是一个向量(我原以为这是一个常量标量值,但重读这个数学公式会让我有不同的想法)。length[]
是平台上6条腿中每一条腿需要的长度数组。最终,程序的另一部分会迭代length[]
进行一些计算并输出特定伺服需要旋转的角度。您还需要查看Java。length[]如果length
是变量名,则是非法的。空括号集仅在类型名之后才合法。赋值是使用=
运算符或其任何短格式(+=
,/=
等)完成的。您必须将算术运算的结果分配给标量变量。我推导了。You case是它的简单版本,在推导的开始部分提到。因此,如果您看到我对@realpoinsist的注释,我认为t长度
也需要是一个数组,如果我理解您编写的所有内容,这应该不会是一个问题.我很清楚,你的println
部分代码只是检查应该发生的事情,是否发生了?@WilliamB。println部分只是检查我是否得到了输出。答案绝对不正确。我只是纠正了所有明显的缺陷和编译错误。我没有检查数学是否正确。