c函数调用的Java等价物

c函数调用的Java等价物,java,c,pointers,dynamic-arrays,Java,C,Pointers,Dynamic Arrays,我需要将几十个数学函数转换成C程序,然后转换成Java等效程序。我对Java不是很在行,所以我们如何在Java中调用下面的函数double mvfBeale(int n,double*x)。动态数组是变量x的最佳选择吗 下面是一个用c编写的简单程序,我需要Java等价物来启动它 #include<stdio.h> #include<math.h> double mvfBeale(int n, double *x) { return pow(1.5 - x[0]

我需要将几十个数学函数转换成C程序,然后转换成Java等效程序。我对Java不是很在行,所以我们如何在Java中调用下面的函数
double mvfBeale(int n,double*x)
。动态数组是变量x的最佳选择吗

下面是一个用c编写的简单程序,我需要Java等价物来启动它

#include<stdio.h>
#include<math.h>


double mvfBeale(int n, double *x)
{
    return pow(1.5 - x[0] + x[0]*x[1], 2) +
    pow(2.25 - x[0] + x[0] * x[1]*x[1], 2) +
    pow(2.625 - x[0] + x[0] * pow(x[1], 3), 2);
}


int main(void)
{
    int n;
    double x;
    double result;

    printf("Enter n: ");
    scanf("%d", &n);

    printf("Enter x: ");
    scanf("%lf", &x);

    result = mvfBeale(n, &x);
    printf("Beale = %lf", result);

}
#包括
#包括
双mvfBeale(整数n,双*x)
{
返回功率(1.5-x[0]+x[0]*x[1],2)+
功率(2.25-x[0]+x[0]*x[1]*x[1],2)+
战力(2.625-x[0]+x[0]*战力(x[1,3),2);
}
内部主(空)
{
int n;
双x;
双重结果;
printf(“输入n:”);
scanf(“%d”和“&n”);
printf(“输入x:”);
扫描频率(“%lf”、&x);
结果=mvfBeale(n,&x);
printf(“Beale=%lf”,结果);
}

提前感谢您的指导。

在Java中,您需要在类中封装独立的C函数。您需要声明这些函数
静态

public class MathHelper {
    public static double mvfBeale(int n, double[] x)
    {
        return Math.pow(1.5 - x[0] + x[0]*x[1], 2) +
        Math.pow(2.25 - x[0] + x[0] * x[1]*x[1], 2) +
        Math.pow(2.625 - x[0] + x[0] * Math.pow(x[1], 3), 2);
    }
}

请注意,由于pow在C中是一个独立的函数,因此其Java版本需要将其作为类的成员引用。

在Java中,您需要将独立的C函数包装到类中。您需要声明这些函数
静态

public class MathHelper {
    public static double mvfBeale(int n, double[] x)
    {
        return Math.pow(1.5 - x[0] + x[0]*x[1], 2) +
        Math.pow(2.25 - x[0] + x[0] * x[1]*x[1], 2) +
        Math.pow(2.625 - x[0] + x[0] * Math.pow(x[1], 3), 2);
    }
}

请注意,由于
pow
在C中是一个独立的函数,因此其Java版本需要将其作为类的一个成员引用。

问题是什么?如果我理解您的问题,普通数组就可以了。您可以像
double mvfBeale(int n,double[]x){…
那样声明它,并用
mvfBeale(n,x)
调用它(Java并不完全有动态数组。它确实有
ArrayList
s之类的东西,但它们有点不同。)函数是否使用局部变量的地址作为数组?在java中,你当然不能这样做……用调用函数的方式
x[1]
可以包含任何垃圾,或者访问它可能会使程序崩溃,或者更糟!这是未定义的行为!问题是什么?如果我理解你的问题,普通数组就可以了。你可以像
double mvfBeale(int n,double[]x){…
一样声明它,并用
mvfBeale(n,x)
调用它。(Java并不完全有动态数组。它确实有类似于
ArrayList
s的东西,但它们有点不同。)函数是否使用局部变量的地址作为数组?在Java中,你当然不能这样做……用调用函数
x[1]的方式
可以包含任何垃圾,或者访问垃圾可能会使程序崩溃,或者更糟!这是未定义的行为!然后调用静态方法,如
MathHelper.mvfBeale(4,x)
然后调用静态方法,如
MathHelper.mvfBeale(4,x)