如何使用Java中的ENUM生成随机数

时间:2013-11-22 19:00:20

标签: java random enums

我正在尝试使用枚举生成随机数(1到10)。变量“num”没有获得更新的随机值,不确定我正在犯的错误。任何指针都会有所帮助。谢谢。

Java代码:

    enum RandomNumbers
   {

     ONE, 
     TWO, 
     THREE, 
     FOUR,
     FIVE, 
     SIX, 
     SEVEN, 
     EIGHT, 
     NINE, 
     TEN;

    public static RandomNumbers getRandom()    
    {
      return values()[(int)(Math.random() * values().length)];
    }
   }


    public class RandomNumbersEnum
    {

     public static void main(String[] args)
     {

      RandomNumbers randN = RandomNumbers.getRandom();

      int num = 0;


      if (randN.values().equals("ONE"))
         num = 1;
      else if(randN.values().equals("TWO"))
         num = 2;
      else if(randN.values().equals("THREE"))
         num = 3;
      else if(randN.values().equals("FOUR"))
         num = 4;
      else if(randN.values().equals("FIVE"))
         num = 5;
      else if(randN.values().equals("SIX"))
         num = 6;
      else if(randN.values().equals("SEVEN"))
         num = 7;
      else if(randN.values().equals("EIGHT"))
         num = 8;
      else if(randN.values().equals("NINE"))
         num = 9;
      else if(randN.values().equals("TEN"))
         num = 10;
      System.out.println("The random number is: " + num);
     }
   }

2 个答案:

答案 0 :(得分:2)

您可以尝试使用Java的Random类,我举一些例子:

Random r = new Random();
int number = r.nextInt(10)+1; 
System.out.println(number); 

答案 1 :(得分:1)

这不起作用的原因是您的if语句正在测试枚举所有RandomNumbers个实例的数组是否等于某些String。当然,它永远不可能。当您调用randN.values()时,实际上是在调用静态方法RandomNumbers.values(),这与您在getRandom()方法中使用的方法相同。如果你想要一个可以比较的字符串,randN.name()会起作用,但这不是一个好主意。

如果您坚持要比较某些内容,则应使用身份比较,如下所示:

int num; /* Notice I'm not prematurely assigning meaningless garbage here. */
if (randN == RandomNumbers.ONE)
  num = 1;
else if(randN == RandomNumbers.TWO)
  num = 2;
else if(randN == RandomNumbers.THREE)
  num = 3;
else
  throw new IllegalArgumentException("Unrecognized RandomNumber: " + randN);

下一步将是使用switch声明:

int num;
switch(randN) {
  case ONE: num = 1; break;
  case TWO: num = 2; break;
  case THREE: num = 3; break;
  default: throw new IllegalArgumentException();
}

你没有充分利用枚举。这是一种充分利用enum类型的方法:

public enum RandomNumber {

  ONE(1),
  TWO(2),
  THREE(3);

  private final int value;

  private RandomNumber(int value)
  {
    this.value = value;
  }

  public int getValue()
  {
    return value;
  }

  public static RandomNumber roll()
  {
    RandomNumber[] values = values();
    int idx = ThreadLocalRandom.current().nextInt(values.length);
    return values[idx];
  }

  public static void main(String... argv)
  {
    RandomNumber num = RandomNumber.roll();
    System.out.printf("The random number is %s (%d).%n", num, num.getValue());
  }

}