2011-04-24 40 views
0

我認爲我犯了一個非常基本的錯誤,但在玩了一個小時後我無法解決這個問題。我在一個方法中創建一個數組,然後嘗試在main方法中調用它,但是當從main方法引用數組時,我總是得到一個空指針異常。我的班級:不同方法的Java Array

public class test { 

    public static String[][] Data; 

    public static void createArray() { 
      System.out.println("Test 2"); 

      String[][] Data = new String[2][4]; 

      Data[0][0] = "13CG43"; //CD ID 
      Data[0][1] = "POP"; //Type 
      Data[0][2] = "12.99"; //Price 
      Data[0][3] = "5"; //Stock 

      //Second row 
      Data[1][0] = "293DD3"; //CD ID 
      Data[1][1] = "HIP"; //Type 
      Data[1][2] = "14.99"; //Price 
      Data[1][3] = "2"; //Stock 

     } 


    public static void main(String[] args) { 

     try { 
      System.out.println("Test1"); 
      createArray(); 
      System.out.print("Test3 " + Data[0][0]); 

      } catch(Exception e) { 
       System.out.println("Error"); 
      } 


    } 
} 

感謝,

+1

在createArray()中,您可以定義一個局部變量'Data'來覆蓋類靜態變量'Data',巫婆永遠不會被初始化。 只需使用類變量'Data',即可在createArray()方法中刪除重定義「String [] []」。 – 2011-04-24 20:19:14

回答

4

這是因爲數組聲明在你的函數調用中。只有在外面,並且在返回createArray函數後數據仍然可用。

變化:

String[][] Data = new String[2][4]; 

Data = new String[2][4]; 

你被重新聲明的createArray功能範圍內的數據陣列。所以你的程序中有2個數據數組。一個全球性的,一個地方性的,隱藏全球的。最新的,這是您初始化的數組,將在createArray函數返回後被銷燬。

7
public static void createArray() { 
      System.out.println("Test 2"); 

      Data = new String[2][4]; 

      Data[0][0] = "13CG43"; //CD ID 
      Data[0][1] = "POP"; //Type 
      Data[0][2] = "12.99"; //Price 
      Data[0][3] = "5"; //Stock 

      //Second row 
      Data[1][0] = "293DD3"; //CD ID 
      Data[1][1] = "HIP"; //Type 
      Data[1][2] = "14.99"; //Price 
      Data[1][3] = "2"; //Stock 

     } 

你被宣佈裏面的方法一個新的局部變量,而不是修改全局的。

+0

輝煌。謝謝! – Joseph 2011-04-24 20:18:15

+0

+1,但如果你添加一個簡短的解釋,你會完成 – MByD 2011-04-24 20:19:41