使用do ... while或while循环进行强制执行

时间:2016-04-20 21:29:37

标签: javascript while-loop

任务是猜测3个数字:x,y和z,只知道它们中的每一个的总和。

我怀疑多种情况可能无效。

在这个测试用例中,答案是显而易见的:每个数字都是5,但由于某种原因,代码不起作用。一旦任何变量的总和为10,它似乎认为任务已经解决。

var bruteforce = function(){
  var i = 0;
  var x = 0; //tie
  var y = 0; //jacket
  var z = 0; //shirt

  while (x+y !== 10 && z+y !== 10 && z+x !== 10){
    var x = 1 + Math.floor(Math.random() * 10);
    var y = 1 + Math.floor(Math.random() * 10);
    var z = 1 + Math.floor(Math.random() * 10);  
    i++;
    }

   console.log('Solved at ' + i + ' attempts.');
   console.log('x =  ' + x);
   console.log('y =  ' + y);
   console.log('z =  ' + z);

};   

bruteforce();

小提琴在这里:https://jsfiddle.net/9cpbfsof/2/

2 个答案:

答案 0 :(得分:4)

您应该在条件中使用OR(||):

while (x+y !== 10 || z+y !== 10 || z+x !== 10){
    var x = 1 + Math.floor(Math.random() * 10);
    var y = 1 + Math.floor(Math.random() * 10);
    var z = 1 + Math.floor(Math.random() * 10);  
    i++;
}

由于你的条件是负面的,你想继续前进,如果其中任何一个失败。 使用AND时,如果其中任何一个成功,则停止。当使用OR时,一旦它们都成功就停止。

此外,我认为您不应该在循环中使用var

while (x+y !== 10 || z+y !== 10 || z+x !== 10){
    x = 1 + Math.floor(Math.random() * 10);
    y = 1 + Math.floor(Math.random() * 10);
    z = 1 + Math.floor(Math.random() * 10);  
    i++;
}

记录:81次尝试:)

答案 1 :(得分:0)

一旦一个条件满足循环结束,所以它的行为与预期一致。使用|| while语句中的(OR)条件。