2013-04-20 92 views
0

我試圖將2d字符串數組轉換爲2d double數組。數組的長度對於每一行都是不同的,所以我無法將數組轉換爲double。我得到一個空指針異常錯誤。文件看起來像這樣將2d字符串數組轉換爲不同長度的2d double

1.0,0.0,0.0,0.456

0.0,1.0,0.0,0.725

0.0,0.0,1.0,-0.150

public class first { 

    public static void main(String[] args) throws FileNotFoundException { 
    java.io.File test2 = new java.io.File("object.key"); 
    Scanner input = new Scanner(test2); 
    String arr[][]=new String[30][30]; 
    int i=0,j=0; 
    while(input.hasNext()) 
    { 
     String val=input.nextLine(); 
     j=0; 
     if(val.contains(" ")) 
     { 
      String str[]=val.split(" "); 
      int cn=str.length; 
      while(cn>0) 
      { 
       arr[i][j]=str[j]; 
       cn--; 
       j++; 
       //System.out.println(cn); 
      } 
     } 
     else 
      arr[i][j]=val; 
     i++; 
      } 

    double[][] intarray=new double[arr.length][arr.length]; 
    int kk=0,jj=0; 
    for(kk = 0; kk < 16; kk++) 
    { 
     for(jj=0;jj <arr.length; jj++) 
     { 
     intarray[kk][jj] = Double.parseDouble(arr[kk][jj]); 
     System.out.println(intarray[kk][jj]); 
     } 
    } 
} 
} 

謝謝

+0

什麼行會導致NullPointerException? – 2013-04-20 05:54:27

+0

它讀取前兩個數字5和67,然後它指向NullPointerException。謝謝 – user2109988 2013-04-20 06:03:54

回答

1

的問題是,您要面值seDoublenull值。
發生這種情況的原因是,當您聲明[30][30]的數組時,上循環中尚未初始化的元素將爲null

如果你不知道哪一個元素很可能被初始化,在第二循環中,你可以簡單地檢查並避免值:

for(jj=0;jj <arr.length; jj++) 
{ 
     if (arr[kk][jj] != null) intarray[kk][jj] = Double.parseDouble(arr[kk][jj]); 
     System.out.println(intarray[kk][jj]); 
} 

雖然這不是最佳的,至少只有初始化值將被處理(然後您將不得不檢查上層循環和文件以確保您爲所有非null元素獲取數值)。

+0

我知道我在null上解析double,那我該如何解決這個問題 – user2109988 2013-04-20 06:15:47

+0

使用他發佈的代碼。在嘗試解析它之前,使用if語句檢查值是否爲空。 – 2013-04-20 20:29:41

0

問題是您正在嘗試使用parseDouble上的null值。

1

你也可以看看ArrayLists,因爲你不知道數組的長度

相關問題