【问题标题】:Nested If-else statements being skipped嵌套的 If-else 语句被跳过
【发布时间】:2014-03-09 13:38:26
【问题描述】:

我正在构建一个游戏,其中计算机生成一个随机数 (1-100),用户必须猜出正确的数字。目标是让计算机将当前的猜测与之前的猜测进行比较,并吐出一条语句:“hot”、“cold”、“hotter”、“colder”等。

我的代码(专注于 JS):CodePen fiddle

//global variables--computer generated guess, and guess log 
var answer = Math.floor((Math.random() * 100)+1); 
var guessArray = []; 
var index = 0; 

//user clicks submit button and guess is registered by computer
$("#submit").click( function(){
    var guess = $("#guess").val(); 

    guessArray.push(guess);
    //prints out the answer and user guesses
    $("#answer").text("Answer:" + " "+ answer);
    $("#guessArrayPrint").text("You guessed: " + " " + guessArray + " ");

    if (answer === guess) {
        $("#statement").text("woo hoo right answer");
    } else {
        var currentDifference = Math.abs(answer-guess);
        var currentDiffArray = [];

        currentDiffArray.push(currentDifference); 

        if (index = 0)  {   
            //if-else statement comparing current guess range to answer
            if ( currentDifference >=1 && currentDifference <= 10){
                $("#statement").text("Ouch! You're hot!");
            } else {
                $("#statement").text("Brr! You're cold!");
            }
        } else { 
            //if-else statement comparing current guess to previous guess
            var previousDiff = answer- prevguess;
            var prevguess = guessArray [i-1];

            if( previousDiff < currentDifference){
                $("#statement").text("Ahh! Getting Warmer!");
            } else {
                $("#statement").text("Brrr...getting colder");
            }
        }
        index++
    }
});

我的嵌套 if-else 语句不起作用。当用户输入猜测时,无论答案有多接近,它总是返回语句“brr.. getting colder”,它位于“else”部分。

理想情况下,当用户输入他们的第一个猜测时,if (index = 0) 应该运行,然后当输入第二个猜测时,它应该移动到带有先前猜测变量的“else”语句。我尝试移动变量,更改 if/else 的顺序,并认为可能是 index++ 的位置。没有任何工作。不确定我的变量、数组或 if/else 语句的语法是否有问题。

tl;dr:当程序运行时,仅运行嵌套的if-else 语句的“else”部分。不知道如何解决……我已经多次检查了我的代码。语法、数组和变量。不确定出了什么问题。

【问题讨论】:

  • "200" !== 200。您需要parseInt(guess, 10)var guess = parseInt($("#guess").val(), 10);
  • if (index = 0) { 应该是 if(index==0){

标签: javascript arrays if-statement nested


【解决方案1】:

你的JS有if (index = 0)。这应该是if (index === 0)

此外,您需要将输入字段的值转换为数字。你可以这样做:

var guess = +$("#guess").val(); // + cast as a number

更多语法错误:

prevguess = guessArray[i - 1] --> prevguess = guessArray[index - 1];

这是部分工作的Fiddle。我经历了一些场景,只有当你给应用程序提供正确的答案时,小提琴才真正起作用。该代码有许多语法错误、错误的引用和计算。我建议打开控制台或调试器,识别这些问题并修复它们。

这是Fully Functional Demo

【讨论】:

  • 问题在于它没有落入最初的 if 语句中。
  • 他/你在使用后定义并声明prevguess
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
相关资源
最近更新 更多