gpt4 book ai didi

java - 字符串异常如何处理

转载 作者:行者123 更新时间:2023-12-01 18:14:51 24 4
gpt4 key购买 nike

在整数变量中输入字符串值时出现错误。我想知道如何处理异常,因为我的程序指示再次输入您的值,而不是停止并给出异常处理错误。

System.out.println("Please enter a number");
Scanner obj1=new Scanner(System.in);
int a=obj1.nextInt(); //I am entering string value here
System.out.println(a);
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at javaapplication13.JavaApplication13.main(JavaApplication13.java:23)

最佳答案

最好防止抛出异常而不是处理它,因为创建异常对象可能非常昂贵。如果是Scanner类你的代码可以是这样的:

Scanner scanner = new Scanner(System.in);

System.out.println("Please enter a number:");

while(!scanner.hasNextInt()){//while user is not providing valid int
//inform him about it
System.out.println("that was not valid integer, please try again: ");
//and consume invalid value (maybe even entire line)
scanner.nextLine();
}
//since we are out of loop it must mean that user entered valid int, lets store it
int a = scanner.nextInt();

System.out.println(a);
<小时/>

您还可以将此代码包装在一些不错的实用方法中,您甚至可以在其中添加对最大尝试次数的支持。对于这种代码,您可以使用结果 Optional<Integer> 。这将使我们能够清楚地了解用户的信息

  • 提供了正确的值,我们将返回带有该值的Optional
  • 或者如果他没有这样做,在这种情况下我们可以返回空可选。

这是处理可能不存在的结果的最干净的方式。

没有Optional我们要么必须:

  • 返回一些默认值,例如:
    • -1但在这种情况下,我们不知道是否 -1表示无效输入,或者如果用户实际提供了 -1这意味着这可能是正确的结果
    • null (如果我们将返回类型更改为 Integer ),但是这样我们就可以让我们的程序员使用我们的方法来检查 if(result != null) 。这对于许多程序员来说可能不是那么明显(使用 Optional 让我们清楚地知道结果可能不存在,因此程序员知道他应该检查这种可能性)。
  • 抛出异常,但由于我们创建方法的原因是为了避免创建和处理异常,所以这有点愚蠢。

所以你的方法可以看起来像

//-1 represents infinite number of tries
public static Optional<Integer> readInt(Scanner sc, String msg, int tries){
System.out.println(msg);

int counter = 0;
//while user still has more tries but is providing invalid int
while((tries == -1 || counter < tries) && !sc.hasNextInt()){
//inform him about wrong data
if (tries == -1 || ++counter < tries)
System.out.println("That was not valid integer. Please try again:");
else
System.out.println("That was not valid integer.");
//and consume invalid value (maybe even entire line)
sc.nextLine();
}
// since we are out of loop it must mean that user entered valid int
// or run out of tries
if (tries == -1 || counter < tries)
return Optional.of(sc.nextInt());
else
return Optional.empty();
}

它的用法看起来像

Scanner scanner = new Scanner(System.in);

Optional<Integer> result = readInt(scanner, "Please enter a number:", 1);

if(result.isPresent()){
System.out.println(result.get());
}else{
System.out.println("User failed to give valid integer. Program will terminate");
}

关于java - 字符串异常如何处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30301673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com