2015-09-23 248 views
-1

我不明白为什么,但我的循环将无法完成。我应该使用JavaScript做一个猜谜游戏,但循环不会实际循环。它只需要一个答案,显示适当的窗口并停下来。不管答案如何。下面是代码:while循环嵌套if语句不会循环javascript

<!DOCTYPE > 
<html> 
<head> 
<title>Welcome To The JS Guessing Game</title> 
</head> 
<script> 

//Initialize the variables that will be needed. 
var target; 
var target_index; 
var guess_input; 
var guesses=0; 
var finished=false; 
var guesses=0; 
var colors = ["blue", "cyan", "gold", "green", "magenta", "orange", "red", "white", "yellow"]; 

function do_game() { 
    var random_number = (Math.random()*colors.length); 
    var random_number=Math.floor(random_number); 
    target=colors[random_number]; 
    alert(target); 
    while (!finished){ 
     guess_input=prompt("I am thinking of a color in the list below. Can you guess which color?"+"\n\n"+ colors.join()); 
     guesses++; 
     if (guess_input!=target){ 
      alert("no") 
      return true; 
     } 
     alert("yes!!") 
     return false; 
    } 
} 
</script> 
<body onload="do_game()"> 
</body> 
</html> 

现在我真不明白我在做什么错误,并在控制台标志了没有错误在任何浏览器:/ 我会很感激的帮助!

干杯,

大卫

+1

设置'finished'到TRUE;在循环... – tymeJV

+2

的'返回TRUE;退出功能,因而不会继续循环。你可以用'continue'或者'else'结构替换它。使用返回使完成的变量过时,所以你可以只使用while(true) –

回答

0

的问题是,你打破了while循环输入了不正确的答案时,你运行该代码:不是返回

if (guess_input!=target){ 
    alert("no") 
    return true; 
} 

相反一个值,考虑使用continue声明。

if (guess_input!=target){ 
    alert("no") 
    continue; 
} 

这将跳转到循环的下一次迭代,住在循环中,但不执行alert("yes!!")。这里有一个JSFiddle来演示。希望这可以帮助!如果您有任何问题,请告诉我。

(而按你的问题的意见,你并不真正需要的finished变量,只是用while(true)应该足够了。)

0

设置finishedtrue(无需将其设置为false因为它会直到你改变它,一直是false)。如果你需要在循环之后返回finished(我认为你不这样做),我在声明中加入了这个效果。您还需要在此处有else子句,否则即使条件满足,您的代码中的finished也将设置为true

function do_game() { 
    var random_number = (Math.random()*colors.length); 
    var random_number=Math.floor(random_number); 
    target=colors[random_number]; 
    while (!finished){ 
     guess_input=prompt("I am thinking of a color in the list below. Can you guess which color?"+"\n\n"+ colors.join()); 
     guesses++; 
     if (guess_input!=target){ 
      alert("no"); 
     } else { 
      alert("yes!!"); 
      finished = true; 
     } 
    } 
    return finished; 
} 
0

无论条件如何,您都返回了布尔值。就拿这里看起来代码:https://jsfiddle.net/zmdcL4h4/1/

//Initialize the variables that will be needed. 
var target; 
var target_index; 
var guess_input; 
var guesses=0; 
var finished=false; 
var guesses=0; 
var colors = ["blue", "cyan", "gold", "green", "magenta", "orange", "red", "white", "yellow"]; 

function do_game() { 
    var random_number = (Math.random()*colors.length); 
    var random_number=Math.floor(random_number); 
    target=colors[random_number]; 
    alert(target); 
    while (!finished){ 
     guess_input=prompt("I am thinking of a color in the list below. Can you guess which color?"+"\n\n"+ colors.join()); 
     if(!guess_input){ 
      finished = true; 
      return true; 
     } 
     guesses++; 
     if (guess_input!=target){ 
      alert("no") 
     } 
     else 
      return true; 
    } 
} 
+0

谢谢,但你的代码显示不是和是的。我也希望当它达到正确的答案时停止。 – Kingdavidek

+0

我更新了代码。你不清楚你想要发生什么 – jnoreiga