将2d字符串数组转换为具有不同长度的2d double

时间:2013-04-20 05:00:19

标签: java

我正在尝试将2d字符串数组转换为2d双数组。每行的数组长度不同,所以我无法将数组转换为double。我收到一个空指针异常错误。文件看起来像这样

5 67

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]);
       }
   }
}
}

谢谢

3 个答案:

答案 0 :(得分:1)

问题是您正在尝试 parseDouble null 值。
发生这种情况是因为当您声明一个[30][30]数组时,上层循环中尚未初始化的元素将为 null

如果您不确定哪个元素可能被初始化,那么在第二个循环中您只需检查并避免 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元素的数值)。

答案 1 :(得分:1)

你也可以查看一下ArrayLists,因为你不知道数组的长度

答案 2 :(得分:0)

问题是您尝试在parseDouble值上使用null