如何避免“java.util.NoSuchElementException”崩溃我的程序

时间:2017-04-02 07:13:33

标签: java nosuchelementexception

TL; DR--如何获取java.util.NoSuchElementException以返回null而不是错误并使程序崩溃。

我正在编写一个应该从文本文件中读取一系列int的程序。在程序中,每次运行时,int的数量都会有所不同。我已经编写了一段代码来读取整数,我想知道如何使java.util.NoSuchElementException不会崩溃我的程序而是返回null。  我写的代码如下

    public static void main(String[] args)  throws IOException{
    Scanner Input = new Scanner(new File("newestcode.txt"));
    Integer[] digits = new Integer[100];
    int h = 0;
    while(true){
        digits[h] = Input.nextInt();
        h++;
        System.out.println(digits[h]);
    }
}

如果你好奇,我要编写的程序是我前几天写的一个糟糕的加密引擎的解密引擎

3 个答案:

答案 0 :(得分:0)

try {
    digits[h] = Input.nextInt();
    h++;
    System.out.println(digits[h]);
}catch (NoSuchElementException e){
    break;
}

答案 1 :(得分:0)

首先,如果您不确定文件中的内容数量,请不要尝试将它们存储到固定大小的数组中。改为使用ArrayList。

也不要使用无限循环while(true),但可以考虑使用Input.hasNext()检查是否还有从文件中读取的内容。

还有一个。您在增量后尝试打印值。这意味着您在0位置添加元素但尝试从1位置读取它。在循环结束时增加。

Scanner Input = new Scanner(new File("newestcode.txt"));
List<Integer> digits = new ArrayList<>();
int h = 0;
while(Input.hasNetxt()){
    digits.add(h, Input.nextInt());
    System.out.println(digits.get(h));
    h++;
}

答案 2 :(得分:0)

您应该使用input.hasNext()方法来检查输入是否还有其他内容&#39; int&#39;在使用它之前。 为了支持任何长度的int元素,您不能将数组设置为固定长度100,您需要使用ArrayList动态添加元素。

Scanner input = new Scanner(new File("./newestcode.txt"));
List<Integer> digits = new ArrayList<>();
int h = 0;
while (input.hasNext()) {
    digits.add(h, input.nextInt());
    System.out.println(digits.get(h));
    h++;
}

注意:您需要在增加h之前打印数字[h]。