如何避免一个“错误”;java.util.NoSuchElementException“;破坏我的程序

如何避免一个“错误”;java.util.NoSuchElementException“;破坏我的程序,java,nosuchelementexception,Java,Nosuchelementexception,TL;DR——如何让java.util.NoSuchElementException返回null而不是错误并使程序崩溃 我在写一个程序,应该从文本文件中读取一系列整数。在程序中,每次运行时INT的数量都会有所不同。我已经编写了一段读取ints的代码,我想知道如何使java.util.NoSuchElementException不会使我的程序崩溃,而是返回空值。 我写的代码如下 public static void main(String[] args) throws IOExcepti

TL;DR——如何让java.util.NoSuchElementException返回null而不是错误并使程序崩溃

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

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

如果您好奇,我将要编写的程序是一种解密引擎,用于前几天我编写的一个糟糕的加密引擎。首先,如果您不确定文件中的整数数量,请不要尝试将它们存储到固定大小的数组中。改用ArrayList

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

也不要使用无休止循环<代码>(true)但请考虑使用<代码>输入.HasNeXT()/Cux>检查文件是否还有读取的内容。

还有一个。您正在尝试打印增量后的值。这意味着您正在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++;
}
Scanner Input=新扫描仪(新文件(“newestcode.txt”);
列表位数=新的ArrayList();
int h=0;
while(Input.hasNetxt()){
digits.add(h,Input.nextInt());
System.out.println(digits.get(h));
h++;
}

在使用输入之前,应该使用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++;
}
Scanner input=新扫描仪(新文件(“./newestcode.txt”);
列表位数=新的ArrayList();
int h=0;
while(input.hasNext()){
digits.add(h,input.nextInt());
System.out.println(digits.get(h));
h++;
}

注意:在增加h之前,您需要打印数字[h]。您听说过try catch吗?请遵循字段的命名约定,使用camelCase。因为您的字段
Input
可能看起来像一个类,使用静态方法。如果您需要解释它是如何工作的,只需问:)轻微的输入错误,它是
Input.hasNext()
而不是
Input.hasNetxt()