我目前正在学习Java,并创建了这个数字猜测器。用户必须输入1到100之间的数字,并被告知该数字是高还是低。当用户输入String而不是字节时,它会崩溃,这就是为什么我在第18和43行中添加了try-catch的原因。现在,当用户输入String时,它会显示我定义的错误消息,但只要这是显示我得到另一个错误:
Guess the number between 1 and 100 (You have 10 tries left) : a
Invalid input. Please enter a number between 1 and 100: Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextByte(Scanner.java:2002)
at java.base/java.util.Scanner.nextByte(Scanner.java:1956)
at com.company.Main.main(Main.java:22)
。
package com.company;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = "";
while (!input.equals("quit")) {
short numberOfTriesStillToGo = 10;
int guessThisNumber = (int) (Math.random() * 100);
int TriesUsed = 0;
System.out.print("Guess the number between 1 and 100 (You have " + numberOfTriesStillToGo + " tries left) : ");
byte Guess = 0;
try{
Guess = scanner.nextByte();
} catch(Exception e) {
System.out.print("Invalid input. Please enter a number between 1 and 100: ");
Guess = scanner.nextByte();
}
for (int i = 0; i < 10; i++) {
numberOfTriesStillToGo -= 1;
TriesUsed++;
if (Guess == guessThisNumber && TriesUsed == 1) {
System.out.print("You guessed it. It took you " + TriesUsed + " trie. Well done!");
break;
} else if (Guess == guessThisNumber && TriesUsed > 1) {
System.out.print("You guessed it. It took you " + TriesUsed + " tries. Well done!");
break;
}
if (Guess < guessThisNumber) {
System.out.print("To small. Try again. " + numberOfTriesStillToGo + " tries left: ");
} else {
System.out.print("To big. Try again. " + numberOfTriesStillToGo + " tries left: ");
}
try{
Guess = scanner.nextByte();
}catch(InputMismatchException e) {
System.out.println("Invalid input. Please enter a number between 1 and 100:");
Guess = scanner.nextByte();
}
}
System.out.println("The number was: " + guessThisNumber);
System.out.print("\nDo you want to play again? If so type \"yes\" otherwise type \"quit\": ");
input = scanner.next().toLowerCase();
}
}
}