【发布时间】:2015-12-16 20:27:12
【问题描述】:
我正在尝试创建一个自定义异常类,但遇到了很多麻烦。有人可以帮我吗!我最近才开始编程,希望能得到一些指点。
import java.util.Random;
import java.util.Scanner;
import java.util.InputMismatchException;
public class GuessingGame {
public static void main(String[]args) throws BadGuessException
{
int min = 1;
int max = 10;
Random rand = new Random();
int numberToGuess = rand.nextInt((max - min) + 1) + min;
Scanner input = new Scanner(System.in);
int guess;
boolean win = false;
int numberOfTries = 0;
while (!win)
{
System.out.println("Guess a number between 1 and 10: ");
try
{
guess = input.nextInt();
numberOfTries++;
if (guess == numberToGuess)
{
win = true;
System.out.println("YOU GOT IT!");
System.out.println("It took you " + numberOfTries + " tires.");
}
else
{
throw new BadGuessException();
}
}
catch(InputMismatchException e)
{
e.getMessage();
}
}
}
}
import java.util.*;
public class BadGuessException extends Exception {
String message = "Sorry, that was an invalid guess!";
//Default Constructor
public BadGuessException()
{
super();
}
//Parameterized Constructor
public BadGuessException(Throwable cause)
{
super(cause);
}
}
我应该创建 2 个构造函数,一个是默认的,一个是参数化的。如果用户输入 1-10 之间的数字,我应该在 catch 块中捕获它并打印消息“invalid guess”如果他们输入字母或其他内容,输出应该类似于“Invalid input”(我应该抓住BadGuessException 中的无效输入,然后将其传递给 InputMismmatch?如果是,我该怎么做?) 现在,当我运行这段代码时,如果我输入一个字母,它不会崩溃,但 while 循环会不断迭代,我无法再输入输入。它只是不断重复“猜一个 1-10 之间的数字”。
我假设这是因为一旦 try 块执行一次,它就不会再次执行?我该如何解决?很抱歉有任何混淆,很高兴澄清!任何帮助深表感谢。
另外,我不确定如何同时捕获 2 个不同的异常。一种用于无效猜测,一种用于无效输入。 :/
【问题讨论】:
-
应该如何同时抛出两个异常?
-
你快到了。只需在已经存在的
catch下方添加一个catch ( BadGuessException e ) { System.out.println( e.getMessage() ); }(另外:e.getMessage();本身没有任何作用,您需要打印它!)。 Idk 关于扫描仪,但也许你需要input.next()来获取(并丢弃)那封信。
标签: java oop exception-handling