所以我试图将这段代码转换为在我的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的值并获得返回值。
任何帮助?
(我知道很多人对这个网站上发布的问题很不满意,请尽量避免消极,并帮助我更好地提出问题,如果是这样的话)
答案 0 :(得分:2)
指针用于使plSeed
成为inout变量。
由于您已将randomNumberGenerator
放入某个类,因此应将函数参数plSeed
提升为该类的字段。
答案 1 :(得分:1)
指针用于更新参数的值。我建议重新组织代码以避免使用这样的参数(并直接访问类变量gv_lRandomNumberSeed
)。其余代码直接转换为Java(如果您熟悉Java的Random
类)。
哦,请你在移植时摆脱匈牙利符号。
答案 2 :(得分:1)
选择包括:
Java的Random类使用第一种方法。对于该方法的调用者来说,这是最简单的。
答案 3 :(得分:0)
使用JNI(Java Native Interface)技术。使用JNI,您可以从java调用C函数。
答案 4 :(得分:0)
该指针基本上只是参考参数的C等价物。您可以通过多种方式在Java中实现相同的功能。看看下面问题中的答案: