【问题标题】:How do you use math.random to generate random ints?您如何使用 math.random 生成随机整数?
【发布时间】:2011-12-22 22:54:16
【问题描述】:

如何使用 Math.random 生成随机整数?

我的代码是:

int abc= (Math.random()*100);
System.out.println(abc);

它打印出来的都是0,我该如何解决这个问题?

【问题讨论】:

  • 代码真的不应该打印0,它不应该编译。
  • 那是什么版本?第一行给了我“类型不匹配:无法将 double 转换为 int”,这是我所期望的。
  • @GworfHi 对于 0 - 100 使用 int abc= (int)Math.random()*101;
  • @God Casting Math.random() 不先乘以 101 意味着 abc 将始终为 0。你必须这样做 int abc = (int)(Math.random()*101);

标签: java random


【解决方案1】:

作为替代方案,如果没有特定理由使用Math.random(),请使用Random.nextInt()

import java.util.Random;

Random rnd = new Random();
int abc = rnd.nextInt(100); // +1 if you want 1-100, otherwise will be 0-99.

【讨论】:

  • (对否决票的解释通常是值得赞赏的,特别是当不清楚使用更直接的解决方案是否不能更好地服务于 OP 时。)
  • 为什么?一个比另一个更随机吗?
  • @user3932000 我不知道-只是更清楚。
  • 更喜欢这种方法,比使用 Math.random 更干净
【解决方案2】:

要编译您的代码,您需要将结果转换为 int。

int abc = (int) (Math.random() * 100);

但是,如果您改为使用 java.util.Random 类,它会为您内置方法

Random random = new Random();
int abc = random.nextInt(100);

【讨论】:

    【解决方案3】:

    将 abc 转换为整数。

    (int)(Math.random()*100);
    

    【讨论】:

    • 需要注意的是这个生成0-99
    • 只说加一:(int)(Math.random()*100+1));
    • @Russell 虽然不再生成 0。
    【解决方案4】:

    您也可以使用这种方式获取 1 到 100 之间的随机数:

    SecureRandom src=new SecureRandom();
    int random=1 + src.nextInt(100);
    

    【讨论】:

    • 欢迎来到 Stack Overflow!请查看formatting code,使其更具可读性
    • 一般来说,您应该只在需要加密强随机数时使用 SecureRandom,因为它可能会阻塞等待更多熵。
    【解决方案5】:
    double  i = 2+Math.random()*100;
    int j = (int)i;
    System.out.print(j);
    

    【讨论】:

    • 这个答案没有增加任何价值,因为相同的答案是 3 年前发布的。
    • 你最好立即转换而不是存储它自己的双精度,除非你真的必须存储i
    【解决方案6】:
    int abc= (Math.random()*100);//  wrong 
    

    您将收到以下错误消息

    线程“main”java.lang.Error 中的异常:未解决的编译 问题:类型不匹配:无法从 double 转换为 int

    int abc= (int) (Math.random()*100);// add "(int)" data type
    

    ,称为类型转换

    如果真实结果是

    int abc= (int) (Math.random()*1)=0.027475
    

    然后你会得到输出为“0”,因为它是一个整数数据类型。

    int abc= (int) (Math.random()*100)=0.02745
    

    输出:2 因为 (100*0.02745=2.7456...等)

    【讨论】:

    • (将代码格式化为代码通常很有帮助,通过缩进四个空格或使用 Ctrl-K 快捷键。)
    【解决方案7】:

    您正在导入java.util 包。这就是它给出错误的原因。 java.util 包中也有一个 random()。请删除导入 java.util 包的 import 语句。那么您的程序将默认使用java.langrandom() 方法,然后您的程序将正常工作。记得投射它,即

    int x = (int)(Math.random()*100);
    

    【讨论】:

      猜你喜欢
      • 2015-10-16
      • 2019-07-27
      • 2021-03-22
      • 2012-11-06
      • 1970-01-01
      • 2020-08-06
      • 2016-07-31
      • 1970-01-01
      相关资源
      最近更新 更多