我的问题是,如何产生一个随机的挑战,一个给定的数目(4-8)的审判?
挑战是从试验中构建的(参见下面的代码)。
试验是Challenge
类的属性,它是由枚举和EnumMap
构建的。
因此,当我在main (如r.nextInt(4) + 4;
)中得到一个随机数时,我将为一个挑战生成这个数目的试验,如下所示
Weapons = 25;
Hacking = 32;
Vehicle = 34;
Speed = 56;
因此,对于一个挑战,我不需要所有的考验,只是其中的一部分。但我仍然需要随机选择的可能性(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);
}
发布于 2017-04-08 20:13:12
比方说,您想要在t
试用中产生一个挑战,其中int t = random.nextInt(5) + 4
,比如4 <= t <= 8
(请注意,nextInt
的界限是排他的)。如果我正确地阅读了您的代码,那么每一次试验都会得到random.nextInt(100) + 25
的相关值(所以在25到124之间)。
你可以这样做如下。我们创建一个包含所有试验的数组,并通过对数组进行洗牌并获取第一个t
,从其中随机选择t
。我们把它们放在地图上,有一个相关的值。
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);
发布于 2017-04-08 19:59:17
如果我没看错你的问题,你是在问:如何随机挑选其中的一个?
如果是这样的话,您可以使用values()
将所有枚举常量放入数组中;然后只需在该数组中选择一个随机条目。或者,您可以简单地对该数组进行洗牌;并且始终返回第一个元素。
Trial allTrials[] = Trial.values();
Random random = new Random();
Trial pickRandomTrial() {
return allTrials[random.nextInt(allTrials.length)];
}
发布于 2017-04-08 19:56:52
但我仍然需要从他们随机选择(4-8)的可能性。
您可以使用
Random r = new Random();
int min = 4;
int max = 8;
System.out.println(r.nextInt((max - min) + 1) + min);
https://stackoverflow.com/questions/43299692
复制相似问题