【问题标题】:How to generate a random integer using math.random class [duplicate]如何使用 math.random 类生成随机整数 [重复]
【发布时间】:2015-10-16 16:32:29
【问题描述】:

RandInt() 方法有问题,因为它不会返回随机整数。结果必须是 int ranged 0-9 并且必须使用 math.random 类。这是我下面的代码:

public class RandNumGenerator {
    public static int RandInt() {
        int n = (int) Math.random() * 10;
        return n;
    }
    public static void main(String[] args) {
        RandInt();
    }
}

【问题讨论】:

  • 这其实是一个关于运算符优先级的问题,和随机数关系不大。
  • rand.nextInt() 更好,因为其他随机生成器也在内部使用 rand.nextInt()rand.next()
  • @LưuVĩnhPhúc 该信息对引用 must use the math.random class 的 OP 来说几乎没有用处。
  • 另请注意,您没有对返回的值做任何事情 - 没有分配它,没有打印它,或任何事情。
  • @MarkoTopolnik,真正的问题是为什么作者必须使用 math.random。

标签: java class math random int


【解决方案1】:

你应该在乘以 10 后将 double 类型转换为 int :

int n = (int) (Math.random() * 10);

否则,您将始终得到 0(因为 Math.random()<1.0 并且因此 (int)Math.random() 始终为 0)。

【讨论】:

    【解决方案2】:

    你需要在乘法两边加上括号

    int n = (int) (Math.random() * 10);
    

    发生了什么

    int n = ((int) Math.random()) * 10;
    

    由于Math.random() 总是大于或等于0 且小于1,因此将其转换为整数将始终等于0。将它乘以 10 将无济于事。

    【讨论】:

    • @Pshemo 不,他们都在那里
    • @Pshemo 啊,好点子。我确实错过了。
    【解决方案3】:

    Casting has higher priority than *所以代码

    (int) Math.random() * 10;
    

    相同
    ((int) Math.random()) * 10;
    

    并且由于 Math.random() 返回范围内的值 [0; 1)(1 - 排除)转换为 int

    (int) Math.random()
    

    将产生0,乘以10也将返回0

    你可能想使用

    (int) (Math.random() * 10)
    

    或更易于阅读和维护Random#nextInt(max) 以生成范围[0; max)max-exclusive)

    【讨论】:

      【解决方案4】:

      你不应该真的使用 Math.random() 来生成随机整数,因为它会生成随机浮点数(即十进制数)

      你应该做类似的事情

      Random myRandom = new Random();
      int randomInt = myRandom.nextInt(10);
      

      【讨论】:

      • 操作:must use the math.random class.
      • @MarkoTopolnik 要求方法在设置为返回浮点数时返回整数实际上是不可能的。除非你想强制转换它,否则当 Math.random 使用 Random 类时这是没有意义的。
      • 在计算中使用方法不同于要求它返回最终结果。您对 OP 目标的解读似乎是孤军奋战。
      • @MarkoTopolnik 在什么情况下将方法的返回值强制转换为您想要的,比使用不强制转换的方法更好?我认为这样做的唯一原因是在教育环境中,在这种情况下,OP 不应该学习低效地做事。
      • 所以请 OP 给你一个他的教育机构的联系方式,然后抱怨他们的课程。同时,期望 OP 完成任务要求的工作。
      猜你喜欢
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 2019-07-27
      • 2013-10-28
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多