如何在方法中加入2个变量的名称?

时间:2017-08-20 14:52:38

标签: java libgdx

编辑:我很抱歉,我需要扩展。我正在使用LibGDx,所以我的代码实际上更复杂。

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。

我不是指连接两个字符串 - 而是特别是对象名称。

我该怎么做?它需要使用数组吗?

5 个答案:

答案 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);
}