2017-04-02 46 views
0

TL; DR--如何让java.util.NoSuchElementException返回null而不是错误并使程序崩溃。如何避免“java.util.NoSuchElementException”崩溃我的程序

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

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]); 
    } 
} 

,程序我要写作是一种对坏加密引擎解密引擎的我写的一天

+1

你听说过试穿吗? –

+0

请按照字段的命名约定,使用camelCase。因为你的字段'Input'可能看起来像一个类,使用静态方法。 – StarCoder

回答

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

如果你需要解释它是如何工作的,只需要问:) – smolus

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++; 
} 
+0

小错字,它是'Input.hasNext()'不是'Input.hasNetxt()' – StarCoder

0

您应该在使用input.hasNext()方法之前检查输入是否还有'int'。 为了支持任何长度的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]。