代码之家  ›  专栏  ›  技术社区  ›  Jack Bashford

else if语句的JavaScript奇怪问题

  •  2
  • Jack Bashford  · 技术社区  · 6 年前

    我在做一个猜数游戏,我想测试一个变量 guess 大于变量 difficulty . 困难 已从我的HTML页中提取,与 猜测 .

    //Initialize variables for player guess, guess counter and previous guesses
    var guess = 0;
    var guessCount = 0;
    var previousGuesses = [];
    
    function startGame() {
    	
    	//Calculate difficulty
    	var difficulty = document.getElementById("difficulty").value;
    	
    	//Calculate secret number
    	var secretNumber = Math.floor((Math.random() * difficulty) + 1);
    	
    	//Repeats while player has not guessed the secret number
    	while (guess != secretNumber) {
    		
    		//Checks for Cancel button pressed
    		guess = prompt("Enter your guess: ");
    		if (guess == null) {
    			return;
    		} 
    		
    		//Checks for empty string/no input
    		else if (guess == "") {
    			alert("Please enter a number");
    		}
    		
    		//Checks if previously guessed
    		else if (previousGuesses.includes(guess)) {
    			alert("You have guessed this number before. Please try a different number.");
    		}
    		
    		else if (guess < 1) {
    			alert("Please enter a number between 1-" + difficulty);
    		}
    		
    		//Checks if guess is higher than secretNumber
    		else if (guess > secretNumber) {
    			alert("Your guess is too high");
    			//Increments guess counter
    			guessCount++;
    			//Adds the previous guess to previousGuesses
    			previousGuesses.push(guess);
    		} 
    		
    		//Checks if guess is lower than secretNumber
    		else if (guess < secretNumber) {
    			alert("Your guess is too low");
    			//Increments guess counter
    			guessCount++;
    			//Adds the previous guess to previousGuesses
    			previousGuesses.push(guess);
    		}
    		
    		//Checks for correct guess
    		else if (guess == secretNumber) {
    			//Increments guess counter
    			guessCount++;
    			
    			//Checks for correct grammar - guesses or guess
    			if (guessCount > 1) {
    				alert("Congratulations, you guessed the correct number in " + guessCount + " guesses!");
    			}
    			else {
    				alert("Congratulations, you guessed the correct number in " + guessCount + " guess!");
    			}
    		}
    		
    	}
    	//Resets variables to play again
    	guess = 0;
    	guessCount = 0;
    	previousGuesses = [];
    }
    body {
    	font-family: sans-serif;
    	text-align: center;
    	animation: background 10s infinite;
    }
    
    h1 {
    	margin-top: 48px;
    	margin-bottom: 48px;
    	animation: heading 10s infinite;
    }
    
    button {
    	height: 48px;
        width: 250px;
        font-size: 24px;
    }
    <h1>Guess the Number</h1>
    
    <button onclick="startGame()">Start the Game</button>
    
    <h2>Difficulty</h2>
    
    <select id="difficulty">
      <option value="10">Beginner</option>
      <option value="50">Intermediate</option>
      <option value="100">Hard</option>
    </select>

    阅读:关键信息

    这段代码有效,但我希望发生一些事情:当猜测大于 困难 ,我想打印 "Please enter a number between 1-" + difficulty . 但是,当我更改此代码时:

    else if (guess < 1) {
        alert("Please enter a number between 1-" + difficulty);
    }
    

    进入这个:

    else if (guess < 1 || guess > difficulty) {...}
    

    (编辑:以上代码是为了找出猜测是否大于 困难 )

    接下来发生的是除了 1 , 困难 任何比 困难 由发出警报 Please enter a number .

    我该怎么解决?

    4 回复  |  直到 6 年前
        1
  •  2
  •   alexP    6 年前

    你在比较字符串而不是数字。将字符串转换为数字。

    else if (parseInt(guess) < 1 || parseInt(guess) > parseInt(difficulty))
    

    更好的方法:输入后直接转换它。。。

    guess = parseInt(prompt("Enter your guess: "));
    

    …将难度值作为数字

    var difficulty = parseInt(document.getElementById("difficulty").value);
    

    //Initialize variables for player guess, guess counter and previous guesses
    var guess = 0;
    var guessCount = 0;
    var previousGuesses = [];
    
    function startGame() {
    	
    	//Calculate difficulty
    	var difficulty = parseInt(document.getElementById("difficulty").value);
    	
    	//Calculate secret number
    	var secretNumber = Math.floor((Math.random() * difficulty) + 1);
    	
    	//Repeats while player has not guessed the secret number
    	while (guess != secretNumber) {
    		
    		//Checks for Cancel button pressed
    		guess = parseInt(prompt("Enter your guess: "));
    		if (guess == null) {
    			return;
    		} 
    		
    		//Checks for empty string/no input
    		else if (guess == "") {
    			alert("Please enter a number");
    		}
    		
    		//Checks if previously guessed
    		else if (previousGuesses.includes(guess)) {
    			alert("You have guessed this number before. Please try a different number.");
    		}
    		
    		else if (guess < 1 || guess > difficulty) {
        	
    			alert("Please enter a number between 1-" + difficulty);
    		}
    		
    		//Checks if guess is higher than secretNumber
    		else if (guess > secretNumber) {
    			alert("Your guess is too high");
    			//Increments guess counter
    			guessCount++;
    			//Adds the previous guess to previousGuesses
    			previousGuesses.push(guess);
    		} 
    		
    		//Checks if guess is lower than secretNumber
    		else if (guess < secretNumber) {
    			alert("Your guess is too low");
    			//Increments guess counter
    			guessCount++;
    			//Adds the previous guess to previousGuesses
    			previousGuesses.push(guess);
    		}
    		
    		//Checks for correct guess
    		else if (guess == secretNumber) {
    			//Increments guess counter
    			guessCount++;
    			
    			//Checks for correct grammar - guesses or guess
    			if (guessCount > 1) {
    				alert("Congratulations, you guessed the correct number in " + guessCount + " guesses!");
    			}
    			else {
    				alert("Congratulations, you guessed the correct number in " + guessCount + " guess!");
    			}
    		}
    		
    	}
    	//Resets variables to play again
    	guess = 0;
    	guessCount = 0;
    	previousGuesses = [];
    }
    <h1>Guess the Number</h1>
    
    <button onclick="startGame()">Start the Game</button>
    
    <h2>Difficulty</h2>
    
    <select id="difficulty">
      <option value="10">Beginner</option>
      <option value="50">Intermediate</option>
      <option value="100">Hard</option>
    </select>
        2
  •  2
  •   Clocher Zhong    6 年前

    改变 else if (guess < 1 || guess > parseInt(difficulty))

    else if (parseInt(guess) < 1 || parseInt(guess) > parseInt(difficulty))

    或更改输入处的类型

    guess = parseInt(prompt("Enter your guess: "));
    
        3
  •  2
  •   user10142469user10142469    6 年前

    您还可以使用内置的 Number 功能。请看我是如何修复下面的代码的:

    difficulty = Number(difficulty);
    guess = Number(guess);
    

    请在声明变量后尝试应用此项,它应该可以工作!

        4
  •  1
  •   Chaska    6 年前

    对此的更改应有助于:

    else if (guess < 1 || guess > parseInt(difficulty)) {