0

2D 文字列配列を 2D double 配列に変換しようとしています。配列の長さが行ごとに異なるため、配列を double に変換できません。null ポインター例外エラーが発生します。ファイルは次のようになります

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

問題は、null値をparseDoubleしようとしていることです。 これは、 の配列を宣言している間に、上部のループで初期化されていない要素がnullになるために発生します。
[30][30]

どの要素が初期化される可能性が高いかわからない場合は、2 番目のループで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 以外のすべての要素の数値を確実に取得する必要があります)。

于 2013-04-20T05:57:24.200 に答える
0

問題は、値を使用しようとしていることparseDoubleですnull

于 2013-04-20T05:58:27.377 に答える