尽管不满足条件,但 Do-While 循环中断

Do-While loop breaks despite not fulfilling conditions

提问人:Taha Attari 提问时间:2/26/2021 更新时间:2/26/2021 访问量:27

问:

这可能是一个简单的修复,但是当我运行 r1 和 r2 以下的循环时,有时不满足中断循环的条件,但循环仍然中断并返回值。例如,即使存在以下情况,循环也会中断Math.abs(r1-r2)<3

  let r1
  let r2
  do{
    r1 = Math.round(Math.random()*(elementsToSwap.length-1))
    r2 = Math.round(Math.random()*(elementsToSwap.length-1))
  }while(
    (Math.abs(r1-r2)<3)
    &&prev.includes(r1)
    &&prev.includes(r2)
  )

我做错了什么?

elementsToSwap和都是数组。prev

JavaScript 随机 do-while 布尔逻辑

评论

0赞 AHMED SAJJAD 2/26/2021
您正在使用,因此条件还取决于其他两个表达式。检查 和 的值&&prev.includes(r1)prev.includes(r2)
0赞 Taha Attari 2/26/2021
@AHMEDSAJJAD这些是“AND”运算符,所以只有当所有 3 个条件都返回 false 时,循环才应该中断,对吧?我的问题是,即使这些条件中的 1 个返回 true,循环有时也会中断。
2赞 AHMED SAJJAD 2/26/2021
实际上恰恰相反。在布尔表达式中,如果即使有一个是假的,则计算结果为 false。我想你想要操作员ANDA & B & COR ||
1赞 Barmar 2/26/2021
@TahaAttari表示仅在条件为真时重复。只有当所有子条件都为真时,条件才为真。while (condition)&&
2赞 Barmar 2/26/2021
已经有数百个关于获得和困惑的问题。回答另一个问题几乎没有什么收获。&&||

答:

1赞 AHMED SAJJAD 2/26/2021 #1

当所有三个条件都为 false 时,您希望使用运算符来中断循环。||

let r1;
let r2;
do {
    r1 = Math.round(Math.random()*(elementsToSwap.length-1))
    r2 = Math.round(Math.random()*(elementsToSwap.length-1))
} while((Math.abs(r1-r2)<3) || prev.includes(r1) || prev.includes(r2))

OR 计算为当所有三个都为 时。||A || B || Cfalsefalse

AND 计算为偶数为 .&&A && B && Cfalsefalse