【问题标题】:Java while loop and random method [closed]Java while循环和随机方法[关闭]
【发布时间】:2012-12-23 00:56:50
【问题描述】:

我目前正在学习 Java 并正在学习 while 循环。如何使用 random() 方法生成随机负数?另外,如何使程序打印出仅在某个范围内的值?例如让 Java 选择 10 个随机数,我怎样才能让它只显示 0.6 和 0.8 之间的数字?

 double randomNumber;
    int counter = 0;

    while(counter <= 99)
    {
        randomNumber = Math.random();
        System.out.println(randomNumber);
         counter++;

【问题讨论】:

  • 尽快获得更好的帮助 1) 发布SSCCE。 2) 每个..question 一个问题,最好包括您认为答案是什么,以及为什么。作为一般提示:对代码块使用一致且逻辑的缩进,以帮助使逻辑流程更加明显。在解决特定问题时表现出一些努力。
  • 随机数 * -1?感谢@Andrew,感谢您的提示。
  • @AndrewThompson - 得到一个负随机数。虽然如果你正在处理原始的double,它确实需要-1.0d,对不起。
  • @BrianRoach 感谢您的澄清。

标签: java loops random


【解决方案1】:

Math.random() 给你一个介于 0.0(含)和 1.0(不包括)之间的数字,因此获取其他范围的传统方法是乘以范围的宽度,然后将范围的底部添加到它。因此:

Math.random() * 0.2 + 0.6

会给你一些 [0.6, 0.8) 的东西。

【讨论】:

  • 我是否只需将 *0.2 + 0.6 添加到我的 Math.random() 中?对我来说,它没有显示 0.6 到 0.8 之间的值。
  • 如果您将我发布的代码放在System.out.println(...) 中,它将打印给定范围内的数字。
【解决方案2】:

获取该范围内的随机数:

double r = Math.random(); // -> [0, 1)
r = r * 0.2;              // scale     -> [0, 0.2)
r = r + 0.6;              // translate -> [0.6, 0.8)

(可以进行类似的数学运算来创建负数或映射到任意范围。)

如果数字已经在该范围内,则“只做某事”:

double r = Math.random(); // -> [0, 1)
if (r >= 0.6 && r < 0.8) {
    // r -> [0.6, 0.8)
} else {
    // r -> not in above range
}

【讨论】:

    【解决方案3】:

    不确定您是只想要负数还是组合。仅负数,乘以-1.0d

    double random = Math.random() * -1.0f; // range ]-1, 0]
    

    对于组合,正面和负面,使用:

    double random = 2.0d * (Math.random() - 0.5d); // range [-1, 1[
    

    对于第二个问题,使用简单的 if:

    double random = 2.0d * (Math.random() - 0.5d);
    if (0.6d < random && random < 0.8d)
    {
         System.out.println(random);
    }
    

    【讨论】:

    • "for the second question" ..最好将值缩放到范围内,以防它后来变成.00006到.00008。 ;)
    • 是的,我知道,但我不知道他为什么会同时要求随机的负值,因为 0.6 和 0.8 都是正数。如果我严格解释他的问题,他会说“显示介于 0.6 和 0.8 之间的数字”而不是“生成”。
    • 我需要先初始化变量“random”,然后才能在第二个问题中使用它吗?谢谢@Martijin,很抱歉这是两个问题。我的意思是关于如何显示负数而不是正数的问题,第二个问题是如何仅在一定范围内显示数字。
    • 不确定是什么导致了混乱,但我编辑了我的答案。希望现在更清楚。
    猜你喜欢
    • 1970-01-01
    • 2017-04-27
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2023-04-09
    • 2015-04-24
    • 1970-01-01
    相关资源
    最近更新 更多