与if语句的JavaScript奇怪的问题

问题描述 投票:2回答:4

我正在制作一个猜数字游戏,我想测试变量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

然后会发生的事情是除了1difficulty以及任何超过difficulty之外的任何猜测都会被Please enter a number提醒。

我该怎么解决这个问题?

javascript html css if-statement
4个回答
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>

2
投票

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

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

或更改输入的类型

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

2
投票

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

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

在声明变量之后尝试应用它,它应该工作!


1
投票

更改为此应该有助于:

else if (guess < 1 || guess > parseInt(difficulty)) {
© www.soinside.com 2019 - 2024. All rights reserved.