2012-06-26 81 views
0

我想從文件中讀取數字的行。代碼如下,但IDE顯示NullPointerException運行時異常。不知道我做錯了什麼。for循環在java中的二維數組

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

哪條線顯示nullpointerexception? – Kshitij

+0

粘貼錯誤日誌,請 –

+0

我寧願給我們一個簡單的'List'列表',其索引是行號和值是整數。 – 2012-06-26 05:05:29

回答

5

你的arr秒尺寸爲未初始化的,並且要調用

arr[index].length 
+1

鷹眼...... –

0

我認爲你應該用StringBuffer ..

//reading the contents of the file into an array 
    public static void readAndStoreNumbers() { 
     //initialising the StringBuffer 
     StringBuffer sb = new StringBuffer(); 

     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(); 
     } 
    } 
0

你需要改變 -

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

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

你可能會運行到NPEX有兩個原因。

  1. 你沒有完成的arr你的定義 - 它不是在你的代碼,您聲明arrint arr[][]明顯;

  2. 即使你有上述情況,也不會爲第二個數組留出空間。你現在擁有的是jagged array;你可以在你的第二個數組中有第二維的任何長度的元素。

    我對代碼進行的唯一修改,以得到它的工作將是以下行:

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

    ...拉元素融入numbers,並進入循環前之後。

0

Java沒有真正的多維數組。你使用的實際上是一個int數組的數組:new int[n][]實際上創建了一個空間數組n類型的對象int[]

因此,您將不得不分別初始化這些int陣列中的每一個。這一點很明顯,因爲你從來沒有在你的程序的任何地方實際指定第二維的長度。