2013-04-20 79 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,因为你不知道数组的长度

相关问题