通过控制台Java输入

时间:2017-05-02 18:15:07

标签: java

我参与编程比赛很多,其中最重要的部分是从用户那里获取信息,因为我们通常会使用两件事

  • 的BufferedReader
  • 扫描仪

现在问题是有时上述每一项在输入时都会产生以下错误  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();

任何人都可以解释为什么会这样吗?

2 个答案:

答案 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
}

最好使用异常处理来管理程序中基于用户任意输入的情况。