gpt4 book ai didi

Java 随机在 2 个地方有不同的行为

转载 作者:行者123 更新时间:2023-11-29 05:32:11 24 4
gpt4 key购买 nike

我已经厌倦了在 Google 上搜索却找不到解决方案,所以...

这是相关代码:

public class Main {

public char source[] = { 'd', 'o', 'i', 't', 'r', 'e', 'c', 'n', 'x', 'y' };

//...
// I don't have a given seed, which is the right approach,
// from what I've read until now
Random rand = new Random();
//...
public void init() {
char config[] = new char[10];

int life= 0;
int pos;
for (int j = 0; j < 100; j++) {
for (int i = 0; i < 10; i++) {
do {
pos = rand.nextInt(10);
} while (source[pos] == '?');
config[i] = source[pos];
source[pos] = '?';
}
life= rand.nextInt((30 + 1) -1);
population[j] = new Individual(config, 0, life);
//...
}
}
//...
}

当我在 main() 方法中调用 init 时,我得到了总体中所有个体的相同序列,不同生活的数字。我试图在 init() 方法中创建 rand,将其作为参数从 main() 发送,但没有任何效果。

我的问题是:如何为总体生成真正随机的序列?

个人:

public class Individual {
private char config[];
private int age;
private int life;

//default constr

public Individ(char config[], int age, int life) {
this.config= config;
this.age= age;
this.life= life;
}

//getters, setters
}

主要():

public static void main(String[] args) {
Main main = new Main();
main.init();
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 10; j++){
System.out.print(main.population[i].getConfig()[j] + " ");
}
System.out.println(main.population[i].getAge() + " " + main.populatie[i].getLife());
}
}

输出:

...
e o x c i r y t d n 0 15
e o x c i r y t d n 0 25
e o x c i r y t d n 0 12
e o x c i r y t d n 0 22
e o x c i r y t d n 0 15
...

最佳答案

问题不在于您的数字生成器,而是您传递给所有个人的 config 数组。数组是引用对象,因此当您在循环中更改 config 以为下一个个体做准备时,更改将在您之前创建的所有 Individual 实例中可见。

您需要在 Individual 的构造函数中复制一份 config,或者在 for 的每次迭代中使用一个新数组> 循环:

int life= 0;
int pos;
for (int j = 0; j < 100; j++) {
char config[] = new char[10]; // <<== Move the declaration here
for (int i = 0; i < 10; i++) {
do {
pos = rand.nextInt(10);
} while (source[pos] == '?');
config[i] = source[pos];
source[pos] = '?';
}
life= rand.nextInt((30 + 1) -1);
population[j] = new Individual(config, 0, life);
}

现在每个 Individual 都有自己的 config 副本,确保每个人都是不同的。

关于Java 随机在 2 个地方有不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20723568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com