Java 如何仅为整数创建自定义异常
我想创建一个类作为例外。我将给你两个我如何尝试的例子。我一直在寻找它,但我找不到一个如何将其付诸实践的例子,或者它对我不起作用 这是我的方法,用户通过ID选择航班,如果程序用户输入字符串,我想抛出一个异常Java 如何仅为整数创建自定义异常,java,exception,Java,Exception,我想创建一个类作为例外。我将给你两个我如何尝试的例子。我一直在寻找它,但我找不到一个如何将其付诸实践的例子,或者它对我不起作用 这是我的方法,用户通过ID选择航班,如果程序用户输入字符串,我想抛出一个异常 code: @Override public void choosePassenger(ArrayList<Passenger> passengerList) { System.out.println("Choose passenger by ID: "
code:
@Override
public void choosePassenger(ArrayList<Passenger> passengerList) {
System.out.println("Choose passenger by ID: ");
try {
int pickedPassenger = scanner.nextInt();
for (Passenger tempUser : passengerList) {
if (pickedPassenger == tempUser.getId()) {
System.out.println("You picked passenger: " + tempUser.getFirstName() + ", "
+ tempUser.getLastName() + ". Balance is: " + tempUser.getBalance());
selectedPassenger = tempUser;
break;
}
}
} catch (InputMismatchException e) {
System.out.println("Wrong input! Try again");
scanner.nextLine();
}
}
这是允许程序用户创建新用户的代码的一部分,他在这里添加名称,我想创建异常,所以如果程序用户为名称添加整数,我想向他显示一个异常
编辑:
如果我删除scanner.nextLine()代码>程序停止,但首先打印我自己的异常消息,然后从下一个方法打印我的消息,然后自己为该方法输入
InputMissMatchException
,因为我输入的是字符串而不是整数如果希望用户重试,可以将它们保持在一个无限循环中,在正确输入后中断
根据@DevilsHnd观察进行编辑。您不能以这种方式使用scanner.nextInt(),因为它将在不提示用户输入的情况下读取,并导致陷入无限循环。
然后,您可以使用nextLine()并验证输入是否为如下所示的数字:
while(true) {
try {
int pickedPassenger = Integer.parseInt(scanner.nextLine());
} catch (NumberFormatException e) {
System.out.println("Wrong input! Try again");
}
}
要将输入限制为名称所需的非数字值,必须检查输入的值是否为数字(没有扫描仪方法将读取限制为非数字值)
在我看来,最优雅的方式是使用一个外部库,它具有类似Apache Commons的特性:
while(true) {
String firstName = scanner.nextLine();
if (!NumberUtils.isCreatable(firstName )) {
passenger.setFirstName(firstName );
break;
} else {
System.out.println("Value cannot be a number!");
}
}
但是,如果不能导入外部库,最简单的方法是使用内置java整数.PARSETIN()函数(尽管您可能需要考虑正则表达式-参见下面的链接):
有关检查值是否为数字(如regex)的更多选项,请检查以下内容:这是否回答了您的问题?首先,你必须考虑“为什么我需要远离当前可用的异常?”,最重要的是,“我怎么能完全避免例外?”没有人希望遇到异常,尤其是你的应用程序的用户。嗨,我目前正在练习,也许在这种情况下我不需要特殊异常,因为程序本身已经在做了,但我想学习如何手动实现它。对名称设置任何限制都不是一个好主意。有一段时间,普林斯把他的名字改成了一个无法发音的音节。然后是弗兰克·扎帕的女儿,月亮单位(她的名字)。然后,有很多美国人的名字的首字母和中间名;在我一生的大部分时间里,除了中间名字段外,我拒绝在任何字段中输入我的中间名。有人告诉我,有些人的名字是数字的。请仔细看看你的例子。在发布示例之前测试它们。
while(true) {
String firstName = scanner.nextLine();
if (!NumberUtils.isCreatable(firstName )) {
passenger.setFirstName(firstName );
break;
} else {
System.out.println("Value cannot be a number!");
}
}
while(true) {
String firstName = scanner.nextLine();
try {
Integer.parseInt(firstName);
System.out.println("Value cannot be a number!");
} catch (NumberFormatException e) {
passenger.setFirstName();
break;
}
}