Java 猜谜游戏循环错误
Java Guessing Game looping error
我在尝试创建一个简单的游戏时遇到了问题。我确定这只是一个简单的错误,但我似乎无法理解。实际上有两个错误,一个是它不会在每次经过后递增 numOfTries
,另一个是它没有正确处理异常。当输入不是整数时,我希望它输出一个字符串。如何解决这两个错误?
/*
* Guessing game
*/
import java.util.*;
public class GuessNumber {
public static void main(String[] args) {
Scanner input = new Scanner(System. in );
guess(input);
System.out.println("You got it correct after " + guess(input) + " tries");
}
public static int guess(Scanner input) {
Random randomNumber = new Random();
int numToGuess = randomNumber.nextInt(10);
int numOfTries = 0;
String prompt = "Enter your guess (integer from 1 to 10)";
numOfTries++;
getInt(input, prompt);
if (getInt(input, prompt) == numToGuess) {
return numOfTries;
} else if (getInt(input, prompt) != numToGuess) {
getInt(input, prompt);
}
return numOfTries;
}
public static int getInt(Scanner input, String prompt) {
int userGuess = 0;
System.out.println(prompt);
try {
userGuess = input.nextInt();
} catch (Exception e) {
System.out.println("You didn't enter an int");
}
return userGuess;
}
}
几件事:
您在两次不同的时间调用了 guess() 两次。函数中的局部变量在函数调用之间不保留它们的值,所以这可能是您认为 numTries 没有增加的原因。此外,通过调用它两次,您迫使用户猜测两个可能不同的随机数(也就是您玩了两次游戏)。你对 getInt() 也有同样的问题。
你调用 nextInt(10) 的方式会给你一个介于 0 和 9 之间的数字。你永远猜不到 10,对方也永远猜不到 0,因为提示告诉他不要猜。
每次调用 guess 时,您只让用户尝试一次,因此 numTries 递增并 returned,但只有一次,产生 return 值每次为 1。为了让用户多次猜测,放入一个while循环。
当你有异常处理时,你应该把它放在一个循环中,以便用户输入输入,直到输入一个有效的 int。
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int guesses = guess(input);
System.out.println("You got it correct after " + guesses + " tries");
}
public static int guess(Scanner input)
{
String prompt = "Enter your guess (integer from 1 to 10)";
Random randomNumber = new Random();
numToGuess = randomNumber.nextInt(10) + 1; //+1 to make it 1-10 inclusive
numTries = 0;
while (getInt(input, prompt) != numToGuess)
{
numTries++;
}
return numTries;
}
public static int getInt(Scanner input, String prompt)
{
int userGuess = -1;
boolean valid = false;
System.out.println(prompt);
while (!valid)
{
try
{
userGuess = input.nextInt();
valid = true;
}
catch (NumberFormatException e)
{
System.out.println("You did not enter an int. Try again");
}
}
return userGuess;
}
我在尝试创建一个简单的游戏时遇到了问题。我确定这只是一个简单的错误,但我似乎无法理解。实际上有两个错误,一个是它不会在每次经过后递增 numOfTries
,另一个是它没有正确处理异常。当输入不是整数时,我希望它输出一个字符串。如何解决这两个错误?
/*
* Guessing game
*/
import java.util.*;
public class GuessNumber {
public static void main(String[] args) {
Scanner input = new Scanner(System. in );
guess(input);
System.out.println("You got it correct after " + guess(input) + " tries");
}
public static int guess(Scanner input) {
Random randomNumber = new Random();
int numToGuess = randomNumber.nextInt(10);
int numOfTries = 0;
String prompt = "Enter your guess (integer from 1 to 10)";
numOfTries++;
getInt(input, prompt);
if (getInt(input, prompt) == numToGuess) {
return numOfTries;
} else if (getInt(input, prompt) != numToGuess) {
getInt(input, prompt);
}
return numOfTries;
}
public static int getInt(Scanner input, String prompt) {
int userGuess = 0;
System.out.println(prompt);
try {
userGuess = input.nextInt();
} catch (Exception e) {
System.out.println("You didn't enter an int");
}
return userGuess;
}
}
几件事:
您在两次不同的时间调用了 guess() 两次。函数中的局部变量在函数调用之间不保留它们的值,所以这可能是您认为 numTries 没有增加的原因。此外,通过调用它两次,您迫使用户猜测两个可能不同的随机数(也就是您玩了两次游戏)。你对 getInt() 也有同样的问题。
你调用 nextInt(10) 的方式会给你一个介于 0 和 9 之间的数字。你永远猜不到 10,对方也永远猜不到 0,因为提示告诉他不要猜。
每次调用 guess 时,您只让用户尝试一次,因此 numTries 递增并 returned,但只有一次,产生 return 值每次为 1。为了让用户多次猜测,放入一个while循环。
当你有异常处理时,你应该把它放在一个循环中,以便用户输入输入,直到输入一个有效的 int。
public static void main(String[] args) { Scanner input = new Scanner(System.in); int guesses = guess(input); System.out.println("You got it correct after " + guesses + " tries"); } public static int guess(Scanner input) { String prompt = "Enter your guess (integer from 1 to 10)"; Random randomNumber = new Random(); numToGuess = randomNumber.nextInt(10) + 1; //+1 to make it 1-10 inclusive numTries = 0; while (getInt(input, prompt) != numToGuess) { numTries++; } return numTries; } public static int getInt(Scanner input, String prompt) { int userGuess = -1; boolean valid = false; System.out.println(prompt); while (!valid) { try { userGuess = input.nextInt(); valid = true; } catch (NumberFormatException e) { System.out.println("You did not enter an int. Try again"); } } return userGuess; }