【问题标题】:Assignment in do-while/while doesn't work as expecteddo-while/while 中的分配没有按预期工作
【发布时间】:2016-06-11 11:57:24
【问题描述】:

我想为$num 分配一个介于 48 和 122 之间的随机值,但值 79 除外。

为了解决这个问题,我尝试了一个 do-while 和一个 while 循环来解决这个问题。我测试了它,但它没有按预期工作,并以无限循环结束。

while($num != 79){
    $num =  rand(48, 122);
};

或:

do {
    $num = rand(48, 122);
} while ($num != 79);

那么为什么这不能按我的意愿工作呢?谁能告诉我我的错误在哪里?

$num 是 48 到 122 之间的数字,但不是 79。

【问题讨论】:

  • 您希望它是一个无限循环还是?你能解释更多吗?
  • 你的逻辑错了。只要数字等于 79,您就想分配一个新的随机数,因为否则您的随机数除了 79,您可以离开 while 循环
  • 我不会是数字,但不是 79。
  • 你能想出更多解释吗? @汉堡包

标签: php while-loop do-while


【解决方案1】:

用值 79 声明 $num 以确保循环开始 当$num!=79时循环将退出

$num = 79; // to make sure the loop will iterate at least once
while( $num==79 ){ 
    $num =  rand(48, 122);
}

根据您的要求,不包括111,修改条件如下:

while( $num==79 || $num==111)

do-while 将使用相同的条件,无需将 79 分配为初始值,因为 do-while 将至少运行一次。

$num = 0; //just to declare the variable
do {
    $num = rand(48, 122);
} while ($num == 79); // you can use || here too: while ($num == 79 || $num == 111)

【讨论】:

  • THX,但这不是解决方案。如果 ($num = rand(48, 122)) 返回 79 怎么办?
  • 循环将继续工作,这是循环的目标,一直工作直到满足某个条件
  • 假设 rand(48, 122); 永远不会生成除 79 之外的任何数字(看起来不可能退出),循环将永远迭代,但这是一个真正的奇迹 - 如果发生 - :)
  • 每当将 79 分配给 $num 时,循环将再次运行,当 $num 分配给任何不同的数字时,它才会退出循环。
  • 如果我不使用 79 和 111 有什么解决方案
【解决方案2】:

在这两种情况下,逻辑都是错误的,您在重复循环,而您的号码不是 79

如果数字 79,您应该重复循环:

$num = 79;// assign value to avoid Notice error 
while($num == 79){ 
    $num =  rand(48, 122);
};

或:

do {
    $num = rand(48, 122);
} while ($num == 79);

【讨论】:

    【解决方案3】:

    试试这个代码

    $num = 0;
    while(true){
       $num = rand(48,122);
       if( $num != 79){
          break;
       }
    }
    

    【讨论】:

    • 你不应该对 PHP 代码使用代码 sn-ps,它只对 HTML 代码有用。
    • 您可以像接受的答案一样写while($num == 79){,不需要if
    • 嗯,这是一个正确的答案......我认为他尝试过但没有奏效,这就是原因。
    猜你喜欢
    • 1970-01-01
    • 2019-10-29
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多