Java - 可能从double转换为int

时间:2018-04-18 02:24:13

标签: java arrays random

我正在尝试编写一个程序来选择一个用户输入的随机值,我收到错误 - 可能有损转换从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]);
}
}

3 个答案:

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