0

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

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

谢谢你

4

3 回答 3

1

问题是您正在尝试parseDouble
发生这种情况是因为当您声明一个 的数组时[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]);
}

虽然这没有优化,但至少只会处理初始化值(然后您必须检查上层循环和文件以确保您获得所有非空元素的数值)。

于 2013-04-20T05:57:24.200 回答
1

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

于 2014-03-12T10:29:18.347 回答
0

parseDouble问题是您正在尝试null使用价值。

于 2013-04-20T05:58:27.377 回答