我正在尝试将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]);
}
}
}
}
谢谢
答案 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
。