JavaScript奇怪的问题与else if语句

时间:2018-07-31 06:31:05

标签: javascript html css if-statement

我正在做一个猜数字游戏,我想测试变量guess是否大于变量difficultydifficulty已从我的HTML页面获取,它与guess的比较不正确。

//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>

阅读此:密钥信息

此代码有效,但是我希望发生一些事情:当猜测大于difficulty时,我要打印"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) {...}

(编辑:上面的代码是找出猜测是否大于difficulty

然后发生的是,1会提醒difficultydifficultyPlease enter a number以外的所有猜测。

我该如何解决?

4 个答案:

答案 0 :(得分:2)

您要比较的是字符串而不是数字。将您的字符串转换为数字。

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>

答案 1 :(得分:2)

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

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

或更改输入的类型

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

对此进行更改应该会有所帮助:

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