这是我的第一个Java程序。任务是创建一个程序,如下所示:
开发一个Java程序,其工作方式如下:
1)。当程序启动时,它显示一条消息欢迎玩家:“欢迎使用Game Guru!”
2)。然后创建一个介于1到20之间的秘密随机数;
3),然后显示一条消息:“猜猜我的魔术数字[1-20]:”
4)。阅读并检查播放器输入的号码。
If is not a number, the program displays a message saying: "Should enter a number". then go back to step 3)
If the number is out of range, the program displays a message saying: "Number out of range". Then go back to step 3)
If the number is smaller than the secret number, the program displays a message saying: "Number too small". Then go back to step 3)
If the number is greater than the secret number, the program displays a message saying: "Number too large". Then go back to step 3)
If the number is the same as the secret number, the program displays a message saying: "You got it!". Then go to step 5)
5)。该程序显示一条消息:“是否需要更多游戏?”
6)。阅读玩家的答案。如果答案为“是”,则执行步骤1);如果答案为“否”,请转到步骤7)
7)。程序显示消息“感谢您玩游戏。Goobye”。
我输入除INT以外的任何东西时,它完全可以正常工作,它给出了异常。我自己尝试进行了研究,发现了“尝试/捕获”功能,但似乎对我不起作用。我的教练不会帮我...尽管事实上他实际上没有教过任何一个...
这是我的代码:
public static void main(String[] args)
{
// TODO Auto-generated method stub
String more;
do
{
System.out.println("Welcome to Game Guru!");
int number = 1 + (int)(Math.random() * 20);
int guess = 0;
Scanner input = new Scanner(System.in);
try
{
System.out.println("Guess my magic number [1-20]: ");
guess = input.nextInt();
}
catch (Exception e)
{
System.out.println("Should enter an integer");
}
while (guess != number)
{
if (guess > 20 || guess < 1)
{
System.out.println("Number out of range");
System.out.println("Guess my magic number [1-20]: ");
guess = input.nextInt();
}
else if (guess < number)
{
System.out.println("Number too small");
System.out.println("Guess my magic number [1-20]: ");
guess = input.nextInt();
}
else if (guess > number)
{
System.out.println("Number too large");
System.out.println("Guess my magic number [1-20]: ");
guess = input.nextInt();
}
}
if (guess == number)
{
System.out.println("You got it!");
}
System.out.println("Want more games? Please enter Y or N.");
more = input.next();
} while (more.equals("y") || more.equals("Y"));
System.out.println("Thanks for playing the game. Goodbye");
}
}
这是控制台:
Welcome to Game Guru!
Guess my magic number [1-20]:
a
Should enter an integer
Number out of range
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Unknown Source)
at java.base/java.util.Scanner.next(Unknown Source)
at java.base/java.util.Scanner.nextInt(Unknown Source)
at java.base/java.util.Scanner.nextInt(Unknown Source)
Guess my magic number [1-20]:
at Game.main(Game.java:46)
我非常感谢对此有任何见解。我不知所措...我应该向Google支付学费。
答案 0 :(得分:1)
所以,从...开始...
try
{
System.out.println("Guess my magic number [1-20]: ");
guess = input.nextInt();
}
catch (Exception e)
{
System.out.println("Should enter an integer");
}
基本上,如果发生异常,Scanner
的缓冲区中仍包含非数字数据,这意味着如果您再次尝试读取缓冲区,则执行类似...
guess = input.nextInt();
您将再次遇到相同的异常。
一般的解决方案是在尝试从缓冲区中读取新数据之前调用input.nextLine()
清除缓冲区。就我个人而言,我将使用nextLine
进行所有输入,并使用Integer.parseInt
来解析您想要作为int
值的那些元素,但这就是我。
由于您每次需要猜测时都需要询问用户输入,因此可以通过使用do-while
循环来简化解决方案(您必须至少以任何一种方式进入循环),这样,您就可以在一个基本循环内获取输入,验证值(作为int
)并对其执行所需的逻辑...
Scanner input = new Scanner(System.in);
String more = "N";
do {
System.out.println("Welcome to Game Guru!");
int number = 1 + (int) (Math.random() * 20);
int guess = 0;
do {
try {
System.out.println("Guess my magic number [1-20]: ");
String text = input.nextLine();
guess = Integer.parseInt(text);
if (guess > 20 || guess < 1) {
System.out.println("Number out of range");
} else if (guess < number) {
System.out.println("Number too small");
} else if (guess > number) {
System.out.println("Number too large");
}
} catch (NumberFormatException e) {
System.out.println("Should enter an integer");
}
} while (guess != number);
System.out.println("You got it!");
System.out.println("Want more games? Please enter Y or N.");
more = input.nextLine();
} while (more.equalsIgnoreCase("y"));
答案 1 :(得分:0)
在尝试中,您正在提供要执行的代码(精细)。在except语句中,您也正确地打印了错误(严重)。
不幸的是,您没有修复它!
将try / catch放入while循环中可能会很有意义,该循环重复进行直到获得有效输入为止。这样,一旦工作,您就可以继续进行逻辑的其余部分,这取决于在try / catch中从用户获取有效输入。
答案 2 :(得分:0)
您要输入一个整数,如果用户输入另一个值作为String或Float,则会出现异常。 添加另一个try {} catch {}块以验证它是否为Integer,否则将其强制转换
答案 3 :(得分:0)
代码中发生的事情是,它在第一次try / catch中捕获了该异常,打印了System.out.println("Should enter an integer");
,然后继续进行do
块的其余部分。打印该消息后,您需要continue
。
但是,在继续测试时,您将在该代码中遇到更多错误,这只是为了回答有关该异常的问题。
答案 4 :(得分:0)
try / catch的目的是告诉用户他们选择的数字不是整数。如果您输入的不是整数,则程序不应继续执行,如在步骤4中所述:第一个if语句用于验证数字是否为整数。 取而代之的是,您使用的是try / catch,这也会停止程序,但有所不同。try/catch block try语句中的代码块提示用户输入数字1-20。如果不是,则抛出异常,因为输入的数字不是整数。它打印消息“应该输入一个整数”,并打印出应该告诉用户错误的错误。它告诉您程序的Main类中存在错误,以及问题所在的位置。打印语句“应输入整数”的目的是在下次程序运行时提示用户输入整数,以便程序可以正确运行。 在您的情况下,使用if语句更有意义。同样,此代码块的唯一目的是验证用户是否输入了整数。