我参与编程比赛很多,其中最重要的部分是从用户那里获取信息,因为我们通常会使用两件事
现在问题是有时上述每一项在输入时都会产生以下错误 1. Nullpointer异常 2. NoSuchElementFoundException
以下是
的代码BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
扫描仪
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
任何人都可以解释为什么会这样吗?
答案 0 :(得分:1)
嗯,在一种情况下,您的BufferedReader为null,因此br.readLine()
会导致NullPointerException。
同样,如果没有这样的下一个元素,则无法调用sc.nextInt()
,从而导致NoSuchElementException。
解决方案:将其包装在try / catch块中。
答案 1 :(得分:0)
考虑到可能的例外,你可以做一些简单的事情
try
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
}
catch(NullPointerException nullPE)
{
//do Whatever it is that you want to do in case of the buffered reader being null.
}
catch (NumberFormatException numFE)
{
//do Whatever it is that you want to do in case of a number format exception, probably request for a correct input from the user
}
请注意,读者正在从控制台读取整行,因此您还必须抓住NumberFormatException
。
在您的其他情况下,您可以简单地使用类似于下面提供的解决方案
try
{
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
}
catch(NoSuchElementException ex)
{
//do Whatever it is that you want to do if an int was not entered, probably request for a correct input from the user
}
最好使用异常处理来管理程序中基于用户任意输入的情况。