gpt4 book ai didi

java - java.util.Scanner 类中 nextLong() 方法的一个令人困惑的问题

转载 作者:行者123 更新时间:2023-12-01 23:20:38 25 4
gpt4 key购买 nike

我正在尝试运行一个简单的代码,它将通过 nextLong() 方法将用户的帐号作为 long 类型。现在,如果用户给出了account_number(long accNo) 作为 string_type 或 character_type 而不是 long_type 值,然后抛出 InputMismatchException 。这也很好,因为我知道事实上 nextLong() 方法可以抛出 InputMismatchException 以及 NoSuchElementException 以及IllegalStateException。但是之后,当我期望在得到 InputMismatchException 后,循环将重新访问并要求我提供 account_number(long accNo) 再次作为长值!然后问题就出现了。它不是要求我给出任何值,而是一个无限循环随着异常一次又一次地运行。!!

 package genericsandcollection;
import java.util.*;

public class ScannerTest {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
boolean b=true;
while(b){
try{
System.out.println("Enter Your Account Number..: ");
long accNo=sc.nextLong();
System.out.println(accNo);
b=false;
}catch(InputMismatchException | IllegalStateException e){
e.printStackTrace();
System.out.println(e);
System.out.println("Wrong syntax");
}
}
}

}

为什么会发生这种情况? nextLong() 不够聪明,无法处理循环内的情况!如果我使用 Long.parseLong(sc.next()) 而不是 sc.nextLong(),那么一切都可以作为 parseLong()抛出 NumberFormatException 即,直到我将帐号提供为 long_type 为止,它一直要求用户将 account_number 提供为 long_type 值。真的很奇怪!!!!如果有人有任何疑问,请帮忙。谢谢。

最佳答案

请勿关闭捕获 block 中的扫描仪,否则您将无法再次使用它。

关于java - java.util.Scanner 类中 nextLong() 方法的一个令人困惑的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20686352/

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