为什么我可以不断获取java.lang.NumberFormatException,尽管它可以正确编译?

时间:2019-04-09 15:39:33

标签: java arrays numberformatexception

我的字符串不断得到NumberFormatException,但我不确定为什么。编译后似乎可以正常工作,而且我无法弄清楚导致它无法运行的代码出了什么问题。

这是所显示内容的屏幕截图。

https://imgur.com/a/LfM5SDA

如上所述,我找不到我的代码无法正常工作的任何原因。在我看来,一切都很好,并且可以正常运行,直到出现最后几种方法为止。

public static int loadArray(int[] numbers) {
        System.out.print("Enter the file name: ");
        String fileName = keyboard.nextLine();
        File file = new File(fileName);
        BufferedReader br;
        String line;
        int index = 0;
            try {
                br = new BufferedReader(new FileReader(file));
                while ((line = br.readLine()) != null) {
                    numbers[index++] = Integer.parseInt(line);
                    if(index > 150) {
                        System.out.println("Max read size: 150 elements. Terminating execution with status code 1.");
                        System.exit(0);
                    }
                }
            } catch (FileNotFoundException ex) {
                System.out.println("Unable to open file " + fileName + ". Terminating execution with status code 1.");
                System.exit(0);
            }catch(IOException ie){
                System.out.println("Unable to read data from file. Terminating execution with status code 1.");
                System.exit(0);
            }

            return index;
    }

我想使用开关来在数组中找到不同的值,但是我什至无法正确加载数组文件。

2 个答案:

答案 0 :(得分:0)

在应用程序工作期间,您会遇到NumberFormatException异常,因为这是RuntimeException,并且可以正常工作。

您尝试从文件的整行中解析int的解决方案问题。

“ 123、23,-2、17”不是一个整数。 因此,您应该执行以下操作: 而不是numbers[index++] = Integer.parseInt(line);

String[] ints = line.split(", ");
for(i = 0; i < ints.length; i++ ){
 numbers[index++] = Integer.parseInt(ints[i]);
}

答案 1 :(得分:-1)

问题是您正在读整行。

 while ((line = br.readLine()) != null)

您不能基于整行中带空格的整数进行解析。

您有两种选择:

  • 之前中读取行,然后调用该方法并将其按空格分割,然后将String[]传递到您的loadArray方法中。
  • 忽略loadArray的参数,并按空格分隔行。然后,您可以遍历该数组的内容,并根据需要将每个数组转换为一个int。