我的问题是,如何使用给定数量(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);
}
答案 0 :(得分:2)
如果我正确地阅读了您的问题,您会问:如何以随机的方式选择其中一个枚举?
如果是这样;您可以使用values()
将所有枚举常量放入数组中;然后只需在该数组中选择一个随机条目。或者,你可以简单地改组那个数组;并始终返回第一个元素。
Trial allTrials[] = Trial.values();
Random random = new Random();
Trial pickRandomTrial() {
return allTrials[random.nextInt(allTrials.length)];
}
答案 1 :(得分:2)
说,您希望t
次int t = random.nextInt(5) + 4
次试验产生挑战,4 <= t <= 8
,random.nextInt(100) + 25
(注意nextInt
的约束是独占< / em>的)。如果我正确阅读您的代码,则每个试用版的相关值都为t
(因此介于25和124之间)。
您可以按照以下方式执行此操作。我们创建一个包含所有试验的数组,并通过对阵列进行混洗并取第一个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);
。我们将它们放在地图中,并附有相关值。
ArrayList<Actor> myActor = new ArrayList<Actor>();
ArrayList<Actor> anotherActor = new ArrayList<Actor>();
// fill array with my actors
Table firstTable = new Table();
for (int i = 0; i < 7; i++) {
firstTable.add(myActor.get(i));
myActor.get(i).addListener(new ActorGestureListener() {
public void touchDown(InputEvent event, float x, float y, int pointer, int button) {
// draw arrow that follows finger
}
public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
// if event finished and was on a cell from the
// second table get starting actor and finishing actor
// else nothing happens
}
});
}
Table secondTable = new Table();
for (int i = 0; i < 7; i++) {
secondTable.add(anotherActor.get(i));
}
答案 2 :(得分:0)
但是我仍然需要随机选择它们(4-8)。
你可以使用
Random r = new Random();
int min = 4;
int max = 8;
System.out.println(r.nextInt((max - min) + 1) + min);