2015-07-02 95 views
-5

我想打一個字符串數組陣列中的Java空指針異常的字符串

我沒有爲它

因爲它必須被初始化固定大小的,我用空intialize它..它給java空指針異常?

在我的代碼另一部分,我陣列上的循環來打印其內容.. 因此如何克服這個錯誤,而無需固定大小

public static String[] Suggest(String query, File file) throws FileNotFoundException 
{ 
    Scanner sc2 = new Scanner(file); 
    LongestCommonSubsequence obj = new LongestCommonSubsequence(); 
    String result=null; 
    String matchedList[]=null; 
    int k=0; 

    while (sc2.hasNextLine()) 
    { 
     Scanner s2 = new Scanner(sc2.nextLine()); 
     while (s2.hasNext()) 
      { 
      String s = s2.next(); 
      //System.out.println(s); 
      result = obj.lcs(query, s); 

       if(!result.equals("no match")) 
       {matchedList[k].equals(result); k++;} 

      } 
     return matchedList; 
    } 
    return matchedList; 
} 
+1

此代碼甚至不會編譯。你想在這裏實現什麼。 –

+1

java中的數組總是固定的大小 - 如果您需要可變大小,請使用'List' –

+0

您應該使用List而不是數組來避免迭代期間的NullPointerExceptions。 – sinclair

回答

0

如果您不知道大小,列表總是更好。

爲了避免NPE,你必須初始化列表如下:

List<String> matchedList = new ArrayList<String>(); 

的ArrayList是一個例子,你可以用列表的所有國王,你需要的。

而且讓你的元素,而不是matchedList[index],你都會有這樣的:

macthedList.get(index); 

所以我們的代碼將是這樣的:

public static String[] Suggest(String query, File file) throws FileNotFoundException 
{ 
... 
List<String> matchedList= new ArrayList<String>(); 
... 

while (sc2.hasNextLine()) 
{ 
    Scanner s2 = new Scanner(sc2.nextLine()); 
    while (s2.hasNext()) 
    { 
     ... 
     if(!result.equals("no match")){ 
      //This line is strange. See explanation below 
      matchedList.get(k).equals(result); 
      k++; 
     } 
    } 
    return matchedList; 
} 
return matchedList; 
} 

有一些奇怪的事情在你的代碼:

matchedList.get(k).equals(result); 

當你這樣做,你比較兩個值,它會返回true或false。您可能希望將值添加到列表中,在這種情況下,您必須這樣做:

matchedList.add(result);