c ++到Java的翻译

时间:2011-11-01 09:18:10

标签: java c++ translation

有人可以这么善良并检查我的C ++到Java的翻译吗?

这是我需要翻译的c ++代码的第一部分(rtcmix库的一部分http://rtcmix.org/):

static void trans(float a, float alpha, float b, int n, double *output){
       int i;
       float delta, interval = 0.0;
       delta = b - a;
       if (n <= 1) {
           *output = a;
           return;
       }
       interval = 1.0 / (n - 1.0);
       if (alpha != 0.0) {
          float denom = 1.0 / (1.0 - exp((double) alpha));
          for (i = 0; i < n; i++)
          *output++ = a + delta * (1.0 - exp((double) i * alpha * interval)) * denom;
       }
       else
       for (i = 0; i < n; i++)
           *output++ = a + delta * i * interval;
}

这是我的java翻译:

    static void trans(float a, float alpha, float b, int n, double output){
           int   i;
           float delta, interval = 0;
           delta = b - a;
           if (n <= 1) {
              output = a;
              return;
           }
           interval = (float) (1.0 / (n - 1.0));
           if (alpha != 0.0) {
              float denom = (float) (1.0 / (1.0 - Math.exp((double) alpha)));
                  else
                  for (i = 0; i < n; i++)
                  output++;
                  output= a +delta * i * interval;
               }
}

4 个答案:

答案 0 :(得分:2)

既然你做了一个合理的尝试,我就是这样写的。

static void trans(double a, double alpha, double b, double[] output) {
    double delta = b - a;
    if (output.length <= 1) {
        output[0] = a;
        return;
    }
    double interval = 1.0 / (output.length - 1);
    if (alpha != 0) {
        double denom = 1 / (1 - Math.exp(alpha));
        for (int i = 0; i < output.length; i++)
            output[i] = a + (1 - Math.exp(i * alpha * interval)) * delta * denom;
    } else {
        for (int i = 0; i < output.length; i++)
            output[i] = a + i * delta * interval;
    }
}

在您的情况下,noutput将成为Java中的一个参数

static void trans(float a, float alpha, float b, double[] output)

'n'是数组的长度,在java中为output.length

BTW:使用只有7位精度的计算浮点数并使用double来存储精度为16位的值,这有点无意义。你可能会以相反的方式完成它。


如果你有一个返回double的方法,它应该使用return而不是通过参数传递(即使在C ++中)

不是分配给输出,而是将其删除并改为使用return value

答案 1 :(得分:1)

                static double trans(float a, float alpha, float b, int n, double output){
       int   i;
       float delta, interval = 0;
       delta = b - a;
       if (n <= 1) {
          output = a;
          return;
       }
       interval = (float) (1.0 / (n - 1.0));
       if (alpha != 0.0) {
          float denom = (float) (1.0 / (1.0 - Math.exp((double) alpha)));
              else
              for (i = 0; i < n; i++)
              output++;
              output= a +delta * i * interval;
           } return output; }

这会更好。

答案 2 :(得分:0)

不,它不起作用,因为Java没有引用变量。您需要在函数末尾返回output并更改调用代码以使用返回值。首先将方法签名更改为static double[] trans(...

您还应该将方法访问级别设置为public或private,具体取决于调用方法的位置。

我看到几个花括号也丢失了,所以你的缩进实际上是误导 - 修复这是一个很好的第一步;)

另请注意,output实际上似乎是原始代码中的大小为n的数组,而不是简单的双倍。

答案 3 :(得分:0)

以下是原始来源:

static void trans(float a, float alpha, float b, int n, double *output)
{
   int i;
   float delta, interval = 0.0;
   delta = b - a;
   if (n <= 1) {
       *output = a;
       return;
   }
   interval = 1.0 / (n - 1.0);
   if (alpha != 0.0) {
      float denom = 1.0 / (1.0 - exp((double) alpha));
      for (i = 0; i < n; i++)
      *output++ = a + delta * (1.0 - exp((double) i * alpha * interval)) * denom;
   }
   else
   for (i = 0; i < n; i++)
       *output++ = a + delta * i * interval;
}

指针参数double * output用于访问数组。在Java中,您必须将其声明为数组。

static void trans(float a, float alpha, float b, int n, double [] output)
{
    // Check that the array is big enough.
    // If it is too small: do nothing.
    if (output.length < n)
    {
        return;
    }

    int i;
    float delta, interval = 0;
    delta = b - a;
    if (n <= 1)
    {
        output[0] = a;

        return;
    }

    interval = (float) (1.0 / (n - 1.0));
    if (alpha != 0.0)
    {
        float denom = (float) (1.0 / (1.0 - Math.exp((double) alpha)));
        for (i = 0; i < n; i++)
        {
            output[i] = a + delta * (1.0 - Math.exp((double) i * alpha * interval)) * denom;
        }
    }
    else
    {
        for (i = 0; i < n; i++)
        {
            output[i] = a + delta * i * interval;
        }
    }
}

修改

我只是忽略了exp()函数已经在代码中使用了。修正了Java代码。