将带有指针的C ++代码转换为Java等价物

时间:2013-04-25 03:41:03

标签: java c++ pointers

所以我试图将这段代码转换为在我的Java程序中使用。但是,它有一个指针,我不确定将其转换为Java的最佳方式是什么。

/**
* 32-bit Multiplicative Congruential Pseudo Random Number Generator
* Microsoft Visual C++ Version
*/
#include <math.h>
/**
* The seed used by randomNumberGenerator.
*/
long gv_lRandomNumberSeed;
/**
* Returns a random number between 0.0 and 1.0.
* plSeed - Pointer to the seed value to use.
*/
double randomNumberGenerator( long* plSeed ) {
double dZ;
double dQuot;
long lQuot;
dZ = ( *plSeed ) * 16807;
dQuot = dZ / 2147483647;
lQuot = ( long ) floor( dQuot );
dZ -= lQuot * 2147483647;
( *plSeed ) = ( long ) floor( dZ );
return ( dZ / 2147483647 );
}

我需要能够使用此函数中返回的上述数字:

/**
* Returns a random variate from an exponential probability
* distribution with the given mean value of dMean.
*/
double exponentialRVG( double dMean ) {
return ( -dMean * log( randomNumberGenerator( &gv_lRandomNumberSeed 
) ) );
}

并且能够输入dMean的值并获得返回值。

任何帮助?

(我知道很多人对这个网站上发布的问题很不满意,请尽量避免消极,并帮助我更好地提出问题,如果是这样的话)

5 个答案:

答案 0 :(得分:2)

指针用于使plSeed成为inout变量。

由于您已将randomNumberGenerator放入某个类,因此应将函数参数plSeed提升为该类的字段。

答案 1 :(得分:1)

指针用于更新参数的值。我建议重新组织代码以避免使用这样的参数(并直接访问类变量gv_lRandomNumberSeed)。其余代码直接转换为Java(如果您熟悉Java的Random类)。

哦,请你在移植时摆脱匈牙利符号。

答案 2 :(得分:1)

选择包括:

  • 将种子作为字段放在与randomNumberGenerator()方法相同的类中。
  • 将种子传递给randomNumberGenerator()。
  • 将种子返回到包含新值和新种子的对象中。

Java的Random类使用第一种方法。对于该方法的调用者来说,这是最简单的。

答案 3 :(得分:0)

使用JNI(Java Native Interface)技术。使用JNI,您可以从java调用C函数。

答案 4 :(得分:0)

该指针基本上只是参考参数的C等价物。您可以通过多种方式在Java中实现相同的功能。看看下面问题中的答案:

Can I pass parameters by reference in Java?