gpt4 book ai didi

java - 如何生成具有给定数量的属性的给定数量的随机对象?

转载 作者:搜寻专家 更新时间:2023-11-01 02:37:41 25 4
gpt4 key购买 nike

我的问题是,如何通过给定的试验次数 (4 - 8) 生成随机挑战?

挑战是通过试验建立的(见下面的代码)。

试验是 Challenge 类的属性,由枚举和 EnumMap 构建.

因此,当我在 main 中获得一个随机数时(如 r.nextInt(4) + 4;),我将生成该挑战的试验次数,如下所示

Weapons = 25;
Hacking = 32;
Vehicle = 34;
Speed = 56;

所以对于 1 个挑战,我不需要所有的试验,只需要其中的一些。但我仍然需要从中随机选择的可能性 (4 - 8)。

我如何生成这些具有给定数量的属性(及其值)的随机 Challenge 对象?所以基本上是其中一些,来自所有这些。

这都是错的吗?我应该如何开始?

到目前为止的代码:

import java.util.*;

public class Challenge {
Random r = new Random();

// DRIVE, VEHICLE, ACCURACY, WEAPONS, REFLEX, STRATEGY, CHARISMA, HACKING,
// SPEED, STEALTH;
public static enum Trial {
DRIVE, VEHICLE, ACCURACY, WEAPONS, REFLEX, STRATEGY, CHARISMA, HACKING, SPEED, STEALTH;
}

Map<Trial, Integer> challenge = new EnumMap<Trial, Integer>(Trial.class);

public Challenge() {
challenge.put(Trial.DRIVE, r.nextInt(100) + 25);
challenge.put(Trial.VEHICLE, r.nextInt(100) + 25);
challenge.put(Trial.ACCURACY, r.nextInt(100) + 25);
challenge.put(Trial.WEAPONS, r.nextInt(100) + 25);
challenge.put(Trial.REFLEX, r.nextInt(100) + 25);
challenge.put(Trial.STRATEGY, r.nextInt(100) + 25);
challenge.put(Trial.CHARISMA, r.nextInt(100) + 25);
challenge.put(Trial.HACKING, r.nextInt(100) + 25);
challenge.put(Trial.SPEED, r.nextInt(100) + 25);
challenge.put(Trial.STEALTH, r.nextInt(100) + 25);
}

List<Trial> keys = new ArrayList<Trial>(challenge.keySet());
Trial randomKey = keys.get(r.nextInt(keys.size()));
Integer value = challenge.get(randomKey);
}

最佳答案

例如,您想用 t 生成挑战试验,其中 int t = random.nextInt(5) + 4 , 这样 4 <= t <= 8 (注意 nextInt 的界限是独占的)。每个试验都有一个关联值 random.nextInt(100) + 25 (因此介于 25 和 124 之间),如果我正确阅读了您的代码。

您可以按如下方式进行。我们创建一个包含所有试验的数组并随机选择 t通过改组数组并取出第一个 t 来摆脱它们.我们将它们放在 map 中,并带有关联值。

Map<Trial, Integer> challenge = new EnumMap<Trial, Integer>(Trial.class);
int t = 4 + random.nextInt(5);
// collect all Trial values in a list
List<Trial> allTrials = Arrays.asList(Trial.values());
// shuffle that list
Collections.shuffle(allTrials);
// select the number of trials we want, add them to challenge
for (int i = 0; i < t; ++i) {
challenge.put(allTrials.get(i), random.nextInt(100) + 25);
}

// example output: {DRIVE=121, WEAPONS=119, STRATEGY=59, HACKING=78, STEALTH=72}
System.out.println(challenge);

关于java - 如何生成具有给定数量的属性的给定数量的随机对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43299692/

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