2012-04-15 115 views
0

我在第23行和第78行Main和getRank()分別得到一個空指針異常錯誤。這發生在我重組代碼並使方法getRank()時發生。此代碼編譯並運行之前我將代碼移動到getRank()方法,我相信這個錯誤是由於變量未正確初始化。Java語言空指針異常錯誤

import java.io.*; 
import java.util.*; 

public class NameRecord 
{ 
    private static String num, name = "dav"; 
    private static String [] fields; 
    private static int [] yearRank; 
    private static boolean match; 
    private static int getInts, marker, year, max; 

     public static void main(String[] args) 
     { 
      java.io.File file = new java.io.File("namesdata.txt"); 
      try 
      { 
       Scanner input = new Scanner(file); 
       while (input.hasNext()) 
       { 
        String num = input.nextLine(); 
        if(match = num.toLowerCase().contains(name.toLowerCase())) 
        { 
         getRank();//My Problem I believe 
         getBestYear(marker); 
         System.out.printf("%s  %d  %d\n",fields[0],year,max); 
        } 
       } 
      } 
      catch(FileNotFoundException e) 
      { 
       System.err.format("File does not exist\n"); 
      } 
     } 



    public static int getRank() 
    { 
     fields = num.split(" "); 
     max = 0; 
     for (int i = 1; i<12; i++) 
     { 
      getInts = Integer.parseInt(fields[i]); 
      if(getInts>max) 
      { 
       max = getInts; 
       marker = i; 
      } 
     } 
     return max; 
    } 
} 

回答

1

你的問題是與num,你在主聲明一個局部變量,它隱藏了您的實例成員:

String num = input.nextLine(); 

你大概的意思是:

num = input.nextLine(); 
+0

這就是問題所在,一旦我從該行代碼中刪除字符串,代碼就可以正常工作。謝謝。 – 2012-04-15 14:05:40

3

全局編號未初始化,因此等於空。在mailn()中,您創建了一個不暴露給getRank()的新局部變量。如果你想使用它,把它作爲參數getRank(NUM)

+0

他只隱藏了類成員。它是沒有初始化的類成員,但局部變量是。 – 2012-04-15 13:52:25

+0

這也工作。謝謝 – 2012-04-15 14:05:53

+0

您是第一個回答+1的人。 – Lion 2012-04-15 14:06:30