【问题标题】:Read lines of numbers from a file to a 2d array using a for loop使用 for 循环将文件中的数字行读取到二维数组
【发布时间】:2012-06-27 09:25:51
【问题描述】:

我想从文件中读取数字行。代码如下,但 IDE 显示 NullPointerException 运行时异常。不知道我做错了什么。

//reading the contents of the file into an array
public static void readAndStoreNumbers() {
    //initialising the new object
    arr = new int[15][];

    try {
        //create file reader
        File f = new File("E:\\Eclipse Projects\\triangle.txt");
        BufferedReader br = new BufferedReader(new FileReader(f));

        //read from file
        String nums;
        int index = 0;
        while ((nums = br.readLine()) != null) {
            String[] numbers = nums.split(" ");

            //store the numbers into 'arr' after converting into integers
            for (int i = 0; i < arr[index].length; i++) {
                arr[index][i] = Integer.parseInt(numbers[i]);
            }
            index++;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

【问题讨论】:

  • 哪一行显示空指针异常?
  • 我宁愿我们一个简单的ListList,索引是行号,值是整数。

标签: java arrays multidimensional-array integer


【解决方案1】:

arr 的第二个维度未初始化,您正在调用

arr[index].length

【讨论】:

    【解决方案2】:

    您可能遇到 NPEX 有两个原因。

    1. 您没有完成对 arr 的定义 - 在您的代码中将 arr 声明为 int arr[][] 并不明显;

    2. 即使您有上述条件,也不会为您的第二个阵列留出空间。你现在拥有的是jagged array;您可以在第二个数组中包含您希望在第二维中任意长度的元素。

      我对您的代码进行的唯一修改是以下行:

      arr[index] = new int[numbers.length];
      

      ...在将元素拉入numbers 之后,进入循环之前。

    【讨论】:

      【解决方案3】:

      你需要改变 -

      for(int i=0; i&lt;arr[index].length; i++) {

      arr[index] = new int[numbers.length];
      for (int i = 0; i < numbers.length; i++) {
      

      【讨论】:

        【解决方案4】:

        Java 没有真正的多维数组。您使用的实际上是一个 int 数组数组:new int[n][] 实际上为 n 类型的 int[] 对象创建了一个包含空间的数组。

        因此,您将不得不分别初始化每个 int 数组。这一点很明显,因为您从未在程序中的任何位置实际指定第二维的长度。

        【讨论】:

          【解决方案5】:

          我认为你应该使用StringBuilder..

          //reading the contents of the file into an array
          public static void readAndStoreNumbers() {
              //initialising the StringBuffer 
              StringBuilder sb = new StringBuilder();
          
              try {
                  //create file reader
                  File f = new File("E:\\Eclipse Projects\\triangle.txt");
                  BufferedReader br = new BufferedReader(new FileReader(f));
          
                  //read from file
                  String nums;
                  int index = 0;
                  while ((nums = br.readLine()) != null) {
                      String[] numbers = nums.split(" ");
          
                      //store the numbers into 'arr' after converting into integers
                      for (int i = 0; i < arr[index].length; i++) {
                          sb.append(Integer.parseInt(numbers[i])).append("\n");
                      }
                  }
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-06-28
            • 2019-06-02
            • 1970-01-01
            • 2020-04-01
            • 1970-01-01
            • 2021-05-02
            • 2013-09-18
            相关资源
            最近更新 更多