2013-04-20 4 views
0

2 차원 문자열 배열을 2 차원 배열로 변환하려고합니다. 배열의 길이는 각 줄마다 다르므로 배열을 double로 변환 할 수 없습니다. 널 포인터 예외 오류가 발생합니다. 이2 차원 문자열 배열을 다른 길이의 2 차원 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

어떤 줄이 NullPointerException을 유발합니까? –

+0

첫 번째 두 숫자 5와 67을 읽은 다음 NullPointerException을 가리 킵니다. 고맙습니다. – user2109988

답변

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에서 parsingdouble을 이해합니다. 그러면 문제를 어떻게 극복 할 수 있습니까? – user2109988

+0

그가 게시 한 코드를 사용하십시오. if 문을 사용하여 값을 구문 분석하기 전에 값이 null인지 확인하십시오. –

0

null 값에 parseDouble을 사용하려고했습니다.

1

배열의 길이를 모르므로 배열 목록을 볼 수도 있습니다.

관련 문제