Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:带数组的算术(乘法、加法、减法)_Java_Arrays - Fatal编程技术网

Java:带数组的算术(乘法、加法、减法)

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

下面是我想用来计算和返回值的方法。方程是: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”*,对于line
rotation[I][j]*platformCoords[I]
和另一个错误,操作符-对于参数类型double,double[],对于line
tlelength+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部分只是检查我是否得到了输出。答案绝对不正确。我只是纠正了所有明显的缺陷和编译错误。我没有检查数学是否正确。