2013-09-28 2 views
0

파일에서 사전 단어 목록을 읽는 프로그램을 작성해야합니다. 다음으로 각 단어의 문자는 알파벳순으로 저장되고 원래 배열에 저장됩니다. (예 : 배트맨이 aabmnt가 됨).문자열 배열의 개별 요소를 사전 순으로 정렬

public static String[] alphabeticalOrder(String[] s) 
{ 
    // 
    // Sort each individual string element by alphabetical order 
    // 
    for (int i = 0; i < s.length; i++) 
    { 
     String wordSt = s[i]; 
     char[] word = wordSt.toCharArray(); 
     Arrays.sort(word); 
     s[i] = new String(word); 
    } 
    return s; 
} 

주에 통화가 단순히 : 그러나 String[] alphaOrder = alphabeticalOrder(dictionary);

, 나는이 프로그램을 실행할 때마다, 나는이 내가없는 것 NullPointerException 얻을 지금 여기에 내가 지금까지 한 일이다 이유를 알아 내야합니다.

s[i]에서 s[0]으로 변경하면 오류가 건너 뜁니다. 그러나 첫 번째뿐만 아니라 String의 모든 요소를 ​​변환해야합니다.

무엇이 잘못 되었나요?

+3

전달 된 문자열 배열에 null 값이있을 가능성이 있습니까? – Zavior

+0

흠 ... 나는 단지 그것에 대해 생각했다. 배열을 마지막 String val까지 크기를 조정하면이 오류가 발생하지 않게됩니까? – Joseph

답변

0

내가보고있는 바로는 String 배열의 요소 중 하나가 null 인 경우에만 NullPointerEception이 발생할 수 있습니다. 그것을 디버깅하려면, 단지 wordSt.toCharArray()를 호출하기 전에 널 검사를 수행합니다

if (wordSt == null) { 
    System.out.println("Null encountered at index: " + i + ". Skipping this element..."); 
    continue; 
} 
char[] word = wordSt.toCharArray(); 

이 입력 잘못이 무엇인지 알아낼 도움이 예상되지 않는 경우를 방지하기 위해 필요한 조치를 취할 것입니다.

+0

그는 더 많은 경고이기 때문에'System.err'에 출력 할 수도 있습니다 :) –

1

Zeal 주석으로 작성된 문자열 배열에 null 요소가있는 경우에만 발생할 수 있습니다.

이에 코드를 변경

: 모두가 지적

public static String[] alphabeticalOrder(String[] s) 
{ 
    // 
    // Sort each individual string element by alphabetical order 
    // 
    for (int i = 0; i < s.length; i++) 
    { 
     String wordSt = s[i]; 
     if(wordSt == null) continue; 

     char[] word = wordSt.toCharArray(); 
     Arrays.sort(word); 
     s[i] = new String(word); 
    } 
    return s; 
} 
0

으로 wordSt가 null의 경우, 당신은 NullPointerException이 발생할 수 있습니다. 당신이 null을 만날 수있는 또 다른 포인트는 String [] 자체가 null (드물지만 가능) 일 때입니다. 그래서 나는 제안 할 것이다 -

public static String[] alphabeticalOrder(String[] s) 
{ 
    if(s == null || s.length == 0) return s; 
    for (int i = 0; i < s.length; i++) { 
     if(s[i] != null) { 
      char[] word = s[i].toCharArray(); 
      Arrays.sort(word); 
      s[i] = new String(word); 
     } 
    } 
    return s; 
} 

희망이 도움이됩니다.

+0

여러분 모두에게 감사드립니다. 문제는 infile이 약간의 null로 전달 되었기 때문에 null 값과 오류를 없애기 위해 간단히 resize 메소드를 작성했습니다. – Joseph

관련 문제