Rock1 = new TextureRegion(texture, 5, 10);
Rock2 = new TextureRegion(texture, 6, 11);
Rock3 = new TextureRegion(texture, 7, 12);
int rannum = ran.nextInt (3)+1;
我希望它显示出来的岩石是随机的。
我有一个名为'rannum'的随机整数,它设置在1和3的范围之间。所以我想弄清楚我是如何得到一个方法使我能够组合“Rock”和“rannum”这样它就可以随机返回Rock1,Rock2或Rock3。
我不是指连接两个字符串 - 而是特别是对象名称。
我该怎么做?它需要使用数组吗?
答案 0 :(得分:4)
您可以像这样使用数组或列表:
TypeRock[] rocks = new TyprRock[]{Rock1, Rock2, Rock3};
或:
List<TypeRock> rocks = Arrays.asList(Rock1, Rock2, Rock3);
...然后您可以像这样使用Random
:
Random ran = new Random();
TypeRock selectedRock = rocks[ran.nextInt(rocks.length)];
或:
TypeRock selectedRock = rocks[ran.nextInt(rocks.size())];
或者在评论中提及@davidxxx时,您可以使用不带Random
的Collections.shuffle(列表):
List<TypeRock> rocks = Arrays.asList(Rock1, Rock2, Rock3);
Collections.shuffle(rocks);
然后您可以使用示例rocks.get(0)
答案 1 :(得分:2)
如果它总是少数可能性(在你的情况下有三种可能的结果)我建议用你的随机数作为参数的switch
语句。
switch(rannum) {
case 1:
return Rock1;
break;
etc ...
}
答案 2 :(得分:1)
是的,最简单的方法是使用数组。请注意,数组indizes从0开始。
答案 3 :(得分:1)
您可以使用如下数组:
add()
答案 4 :(得分:0)
我该怎么做?它需要使用数组吗?
许多其他答案和我的评论提供了使用数组或集合的解决方案。但是需要使用这样的结构吗?
这取决于。如果岩石是局部变量,它们的变量名称在运行时会丢失,您将最终使用数组,切换或类似的东西。相反,如果岩石是实例变量(即字段),则可以使用反射。我仍然建议采用阵列方法。
这里有一个片段,说明了这个想法。回想一下,只抛出Exception
是不好的做法:
Rock rock1;
Rock rock2;
Rock rock3;
public Rock getRandomRock() throws Exception {
String fieldName = "rock" + (1 + ran.nextInt(3));
Field field = getClass().getDeclaredField(fieldName);
return (Rock) field.get(this);
}