gpt4 book ai didi

java - 随机数生成器在创建新对象时返回相同的结果

转载 作者:行者123 更新时间:2023-12-01 05:38:08 30 4
gpt4 key购买 nike

我目前正在自学java,其中一个练习题的最终输出需要不同对象的不同名称(这是根据随机数生成器决定的)。但是,每次我创建对象时,这些对象最终都具有相同的名称。为了给出一个清晰的示例,以下是示例输出:

Expected Output

下面是我的输出:

enter image description here

正如我的输出中突出显示的那样,我所有的动物都具有相同的名称,而预期的输出具有不同的名称。我已经测试了多次,可以确认这不是运气。

我的 Cow 类代码如下(我省略了不相关的方法):

import java.lang.Math;
import java.util.Random;

public class Cow implements Milkable, Alive {
private String name;
private double capacity;
private double amount;

private static final String[] NAMES = new String[]{
"Anu", "Arpa", "Essi", "Heluna", "Hely",
"Hento", "Hilke", "Hilsu", "Hymy", "Ihq", "Ilme", "Ilo",
"Jaana", "Jami", "Jatta", "Laku", "Liekki",
"Mainikki", "Mella", "Mimmi", "Naatti",
"Nina", "Nyytti", "Papu", "Pullukka", "Pulu",
"Rima", "Soma", "Sylkki", "Valpu", "Virpi"};

private static final String randName = NAMES[new Random().nextInt(NAMES.length)];

// Default Constructor <- where issue is
public Cow(){
this(randName);
}

// Overloaded Constructor
public Cow(String name){
this.name = name;
this.capacity = (15.0 + new Random().nextInt(26));
this.amount = 0.0;
}

// accessors...
// milk... removes milk from cow's tank (implements Milkable interface)
// liveHour... adds milk to cow's tank (implements Alive interface)
// toString...
}

另外,这是我上面使用的主类(同样,省略了不必要的部分):

        Farm farm = new Farm("Esko", new Barn(new BulkTank()));

farm.addCow(new Cow());
farm.addCow(new Cow());
farm.addCow(new Cow());

System.out.println(farm);

This post表示如果构造函数上已经设置了种子,则随机数生成器最终是确定性的。但是,我的随机数生成器必须具有特定的种子(在本例中为包含随机名称的数组长度)才能选择随机名称。我想知道是否有人知道让我的随机数生成器产生新值的方法。提前谢谢你。

最佳答案

问题是这一行:

private static final String randName = NAMES[new Random().nextInt(NAMES.length)];

您将 randName 定义为静态变量,它绑定(bind)到类而不是实例,这意味着 Cow 的每个实例都有相同的 randName

在您的默认构造函数中,您应该:

public Cow(){
this(NAMES[new Random().nextInt(NAMES.length)]);
}

关于java - 随机数生成器在创建新对象时返回相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58854718/

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