import java.util.*;
public class NGG {
static Scanner numberEntered;
static Scanner userInput = new Scanner(System.in);
static int guessedNumber;
static int randomNumber = (int) (Math.random()* 11);
static Scanner reply;
static String answer;
public static void main(String[] args) {
guessChecker(guessedNumber);
}
public static void guessChecker(int userGuess) {
while (userGuess != randomNumber) {
intro();
userGuess = intChecker();
if (userGuess == randomNumber) {
System.out.println("Congradulations!");
System.exit(0);
} else {
System.out.println("That was Incorrect!");
delay(1000);
retryChecker(reply, answer);
}
}
}
public static int intChecker() {
try {
return userInput.nextInt();
} catch (InputMismatchException e) {
userInput.next();
System.out.println("Your answer was Invalid!");
delay(2000);
retryChecker(reply, answer);
return 0;
}
}
public static void retryChecker(Scanner userReply, String userChoice) {
System.out.println("Would you like to try again?");
userReply = new Scanner(System.in);
userChoice = userReply.nextLine();
if (userChoice.equalsIgnoreCase("yes") || userChoice.equalsIgnoreCase("y")) {
guessChecker(guessedNumber);
} else {
System.exit(0);
}
}
public static void intro() {
System.out.println("I'm thinking of a number in my head...");
delay(1000);
System.out.print("Try to guess it: ");
}
public static void delay(int millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {}
}
}
这是我的问题:
我有一个数字猜谜游戏,每次它说"尝试猜测它:" 它通常会让你输入一个猜测,除非你之前的猜测是一个字符串,字母或数字,然后是一个空格,然后是另一个字符串,字母或数字,然后不是让你自己写的猜测它只会打印输出& #34;你的答案是无效的"并继续该计划。
我该如何解决这个问题?这样userInput也可以是一个字符串,字母或数字,后跟一个空格,然后是另一个字符串,字母或数字,它会正常地移动一个。
答案 0 :(得分:0)
问题出在intChecker()
。
public static int intChecker() {
try {
return userInput.nextInt();
} catch (InputMismatchException e) {
userInput.nextLine(); // -> changed from .next() to nextLine()
System.out.println("Your answer was Invalid!");
delay(2000);
retryChecker(reply, answer);
return 0;
}
}
原因是当你使用next()
时,它会在遇到空格或EOF时返回字符串。
因此,当您输入it's me!
时,首先检查it's
并说明错了。它询问是否继续下一步。当您按y
转到该方法并读取剩余的字符串me!
时。
您在此处使用了不同的扫描程序userInput
和userReply
。由于userInput
是静态的,因此在返回me!
后,对象不会死亡并且其中的剩余字符串为its
。
因此使用nextLine()
将返回整个字符串。
有关它们如何工作的详细信息,请查看我的其他answer
我希望它有所帮助。