我正在尝试编写一个程序来选择一个用户输入的随机值,我收到错误 - 可能有损转换从double到int。这是我的代码。任何帮助表示赞赏。
public class Driver
{
public static void main(String [] args)throws IOException{
int random;
int options;
Scanner input = new Scanner(System.in);
int randy;
System.out.print("Please enter the number of options you would like to use: ");
String [] choices = new String [input.nextInt()];
int min = 1;
int max = choices.length;
random = (Math.random() * ((max - min) + 1)) + min;
for(int i = 0; i < choices.length; i++){
System.out.print("Enter option " + (i+1) + ": ");
choices[i] = input.next();
}
System.out.print("The random option chosen is: " + choices[random]);
}
}
答案 0 :(得分:0)
您收到该错误的原因是Math.random()
返回一个双精度错误。因此行
(Math.random() * ((max - min) + 1)) + min;
会尝试将random
的{{1}}分配给int
。编译器不喜欢看到这个,所以你不会通过它。有一个解决方案。您可以将它投射到int
,然后给你
(int)((Math.random() * ((max - min) + 1)) + min);
这样可以降低价值。请注意,这样做绝不会让您获得max
的价值,因此您无需担心IndexOutOfBoundsException
。
答案 1 :(得分:0)
作为旁注:当您尝试将较大值的数据类型分配给较小的数据类型时,该值可能会被截断。这是一个类型安全问题。
答案 2 :(得分:-1)
因为 Math.random()返回一个doube,将随机或 Math.random()转换为int:
...
random = (int) ((Math.random() * ((max - min) + 1)) + min);
...