这是我的第一个Java程序。任务是按如下方式创建一个程序:
开发一个Java程序,其工作方式如下:
1)。当程序启动时,它会显示一条消息欢迎玩家:“欢迎来到游戏大师!”
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以外的任何东西时,它都会给出一个异常。我试着自己研究一下,找到了Try/Catch,但它似乎对我不起作用。我的讲师不会帮助me...despite,因为他实际上没有教过这些……
下面是我的代码:
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)我真的很感谢你对这一点的见解。我已经无计可施了……我应该付谷歌的学费。
发布于 2018-09-19 08:50:45
所以,从…开始。
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"));发布于 2018-09-19 08:43:12
在试验中,你给出了你想要执行的代码(很好)。在except语句中,您也正确地打印出了错误。
不幸的是,你没有修复它!
将try/catch放在while循环中可能更有意义,该循环会一直重复,直到您获得有效的输入。这样,一旦它起作用了,您就可以继续逻辑的其余部分,这些逻辑依赖于在try/catch中从用户那里获得有效输入。
发布于 2018-09-19 08:44:17
你要求输入一个int,如果用户输入另一个字符串或浮点数形式的值,你会得到一个异常。添加另一个try{} catch{}块以验证它是否为Integer,否则强制转换它
https://stackoverflow.com/questions/52396324
复制相似问题