【发布时间】:2026-01-23 07:15:01
【问题描述】:
我正在做一个项目,我将一些 Java 代码移植到 C 中。到目前为止一切都很顺利,但我坚持将 Random.nextInt(int bound) 方法移植到 C 中。
我的 Java 代码是:
int arr[] = new int[100000];
Random r = new Random(0);
for (int i = 0; i < 100000; i++)
arr[i] = r.nextInt(20);
其中 arr 数组总是具有相同的内容(每次执行后),这是正常的。
我的等效 C 代码是:
int arr[100000], i;
srand(0);
for (i = 0; i < 100000: i++)
arr[i] = rand() % 20;
两个arr数组的内容不相同。
我想将生成的随机数打印到 Java 代码中的文件中,以便在 C 代码中将它们(数字)用作常量数组,而不是使用 rand() 函数,但是数组的大小会非常大这将阻止我这样做,因为 C 代码将在嵌入式设备(微控制器)上运行。
我的问题是如何将 Java 代码移植到 C 中,以便获得相同的随机数?
【问题讨论】:
-
试图将代码从一种语言准确地移植到另一种具有不同抽象能力的语言通常会导致混乱、无法维护的代码和一大堆问题。西亚德:我们不是编码服务。
-
如果这应该是一个随机数数组,为什么相同的数字很重要?
-
太棒了!所以真的很随意! (如果不同语言中随机数生成器的实现方式不同,那么它们的行为就会不同,生成不同的随机数序列。)所以这在Java和C之间是不能等价的。
-
How can I port that Java code into C where I can obtain the same random numbers?- 简单 - 找出用 Java 实现的随机数生成器。在 C 中实现它并使用相同的种子启动它。但是,如果您不希望它们是随机的,对它们进行硬编码会容易得多。 -
不仅生成的随机数序列在 JAva 和您的 C 库之间会有所不同,而且在您的 PC C 编译器和嵌入式系统的 C 交叉编译器之间几乎肯定也会有所不同。 dilbert.com/strip/2001-10-25
标签: c random code-translation