【问题标题】:Function/Do-while to generate random numbers until they are all the sameFunction/Do-while 生成随机数,直到它们都相同
【发布时间】:2020-01-31 18:31:35
【问题描述】:

(Javascript) 我的目标是生成分配给 a、b 和 c 的 3 个随机数。我想一遍又一遍地这样做,直到 a b 和 c 都是相同的数字,同时还要跟踪它需要多少次尝试。但是,唯一的结果是我为调试添加的“错误”部分。关于我可能出错的地方有什么想法吗?

    var a = Math.floor(Math.random() * 6) + 1;
    var b = Math.floor(Math.random() * 6) + 1;
    var c = Math.floor(Math.random() * 6) + 1;
    var runs = 0;
function tripleNumbers() {
    while(a!=b && c !=b) {
        a = Math.floor(Math.random() * 6) + 1;
        b = Math.floor(Math.random() * 6) + 1;
        c = Math.floor(Math.random() * 6) + 1;
        runs++;
    }
    if(a == b && a == c) {
        document.write("A: "+a);
        document.write("B: "+b);
        document.write("C: "+c);
        document.write("Total Runs: "+runs);
    }
    else {
        document.write("Error");
    }
}
tripleNumbers();

【问题讨论】:

  • 如果a == b,while循环将停止。但这并不能保证c == b。永远不会执行该逻辑检查。您很可能希望它成为 OR。
  • @Taplar 那不是反过来吗?如果我将其设为 OR,那么 while 循环结束只需要一个条件,不是吗?是否 AND 确保在退出循环之前需要满足 BOTH ?
  • 不,如果将其设为 OR,则 while 循环至少需要一个条件才能继续。
  • @Taplar 它现在可以工作了,因为它是一个 OR。感谢您的帮助!
  • @taplar 是正确的,while 循环本质上是在说“继续重复运行这个东西while 以下是true”。跨度>

标签: javascript loops numbers


【解决方案1】:

在 while 循环中,您必须使用 OR 运算符 (||) 而不是 AND,因为您要运行循环直到其中一个不等式为真:

while(a!=b || c!=b){/*...*/}

或否定整个表达式,并使用正等式检查:

while(!(a==b && c==b)){/*...*/}

【讨论】:

    【解决方案2】:
    while(a!=b && c !=b) {
    

    问题是您的逻辑短路了。 a != b && c != b 表示只要这两个条件都为真,就应该执行循环。

    但是,如果第一个条件为假,则不计算第二个条件。

    因此,从逻辑上讲,在条件结束后我们最多可以断言a == b

    如果您想确保循环继续,只要任何值不同,您应该将其更改为使用 OR。这样,要结束循环,必须a == bc == b 为真。

    【讨论】:

      猜你喜欢
      • 2023-02-06
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-30
      • 1970-01-01
      相关资源
      最近更新 更多