将带有指针的c++代码转换为等效的Java代码

Converting C++ code with pointers into a Java equivalent

本文关键字:代码 Java 转换 c++ 指针      更新时间:2023-10-16

所以我试图将这段代码转换为在我的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输入一个值并获得一个值作为返回…

帮忙吗?

(我知道很多人对这个网站上发布的糟糕问题感到愤怒,如果是这种情况,请尽量避免消极并帮助我更好地提出问题)

该指针用于设置plSeed为inout变量

由于您已经将randomNumberGenerator放入某个类中,您应该将函数参数plSeed提升到该类的一个字段。

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

哦,移植时请去掉匈牙利符号

选项包括:

  • 将种子作为一个字段放置在与randomNumberGenerator()方法相同的类中。
  • 将可变对象中的种子传递给randomNumberGenerator()。
  • 返回一个同时包含新值和新种子的对象中的种子。
Java的Random类使用第一种方法。这对于方法的调用者来说是最简单的。

使用JNI(Java本机接口)技术。使用JNI,您可以从java调用C函数。

该指针基本上就是C语言中的引用形参。您可以通过多种方式在Java中实现相同的功能。请看下面问题的答案:

我可以在Java中通过引用传递参数吗?