【问题标题】:Java - possible lossy conversion from double to int [duplicate]Java - 从 double 到 int 的可能有损转换 [重复]
【发布时间】:2018-04-18 02:24:13
【问题描述】:

我正在尝试编写一个程序来选择用户输入的随机值,但我得到了错误 - 从 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]);
}
}

【问题讨论】:

标签: java arrays random


【解决方案1】:

您收到该错误的原因是Math.random() 返回一个双精度值。因此行

(Math.random() * ((max - min) + 1)) + min;

将尝试为random 分配一个双精度值,即int。编译器不喜欢看到这个,所以你不会通过它。有一个解决方案。您可以将其转换为 int,给您

(int)((Math.random() * ((max - min) + 1)) + min);

这只会将值四舍五入。请注意,这样做永远不会让您获得max 的值,因此您无需担心IndexOutOfBoundsException。

【讨论】:

    【解决方案2】:

    附带说明:当您尝试将较大值的数据类型分配给较小的数据类型时,该值可能会被截断。这是一个类型安全问题。

    【讨论】:

      【解决方案3】:

      因为 Math.random() 返回一个 doube,所以将 random 或 Math.random() 转换为 int:

      ...
      random = (int) ((Math.random() * ((max - min) + 1)) + min);
      ...
      

      【讨论】:

        猜你喜欢
        • 2014-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-23
        • 2014-08-02
        • 2014-03-16
        相关资源
        最近更新 更多