[英]How to Generate Random Numbers using ENUM in Java
我試圖使用枚舉生成隨機數(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);
}
}
您可以嘗試使用Java的Random類,我舉一些例子:
Random r = new Random();
int number = r.nextInt(10)+1;
System.out.println(number);
之所以不起作用,是因為您的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());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.