【问题标题】:Why does this loop keep going forever? [closed]为什么这个循环永远持续下去? [关闭]
【发布时间】:2019-12-17 16:31:08
【问题描述】:

这是我的代码

这里我做了一个循环,当 x 的值等于随机数时应该会中断

public class Bark {
public static void main(String[] args) {
    for (double x = 0 ; x>-1 ; x++) {
        System.out.print(x + " ");
        if( x == Math.random()) {
            break;
        }
    }
}}

【问题讨论】:

  • 为什么你认为这个循环会停止? x 等于 Math.random 的概率是多少?
  • 不清楚你打算如何工作。用文字表达您的要求,或许我们能找到可行的解决方案。
  • 欢迎来到 StackOverflow!请阅读how to ask 以改进您的问题。
  • 随机数”在这里并不完全正确,因为您每次迭代都会生成一个新的随机数,因此实际上有很多随机数。跨度>

标签: java for-loop


【解决方案1】:

您以1 为增量从0 循环迭代到Infinity,并且Math.random 只能等于从0.0 到小于1 的值。如果Math.random() 不等于0第一次迭代,循环将永远进行。

【讨论】:

    【解决方案2】:

    您每次都在生成一个新的随机数。 要打破,最好在范围内生成一次随机数,然后循环。

    【讨论】:

      【解决方案3】:

      for 计数器 x0 开始,每次迭代都会递增 (x++),只要 x> -1 就继续。当循环开始并继续增加时,x 大于 -1,>-1 始终如此,所以永远持续下去。

      另一个检查是Math.random,虽然 Math.random 确实返回一个介于 0 和 1 之间的数字,但它在第一次迭代中返回 01 的可能性很小。

      【讨论】:

      • x 实际上从 0 开始。循环中断的唯一机会是Math.random() 在第一次迭代中返回0。至少可以说不太可能。如果这没有发生,x 继续假设值 1, 2, 3, 4... 并且条件 x == Math.random() 将永远不会成立。
      • 添加了随机部分,错过了0 vs 1。我已经编辑了,谢谢。
      【解决方案4】:

      这里有几点:

      首先,您生成的是实数,而不是整数,而是将其与整数进行比较。 x 将始终是一个整数,Math.random() 将生成一个介于 0 和 1 之间的随机实数值。(请注意,x 在技术上属于 double 类型这一事实并没有真正的帮助,因为您从 0 开始并且每次加 1,所以它总是一个整数)。

      您应该查看this Q&A 以了解如何仅生成整数,以便至少有可能在每次迭代中匹配。

      其次,其他答案已经指出了这一点,但Math.random() 将生成 0 和 1 之间的数字,这意味着这可能匹配的唯一时间是在第一次或第二次迭代中。

      第三,这可能是语义,但将其称为“ 随机数”是不正确的。每次迭代都会生成一个新的随机数,因此实际上会生成很多随机数(不仅仅是一个)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-06-15
        • 1970-01-01
        • 2018-10-09
        • 1970-01-01
        • 2021-03-20
        • 2019-03-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多