2014-11-05 88 views
0

我需要下面我的代碼的意外輸出幫助。 我創建了一個名爲「學生」的類,我稱之爲「MainStudent」,我沒有錯誤的代碼,當我嘗試將Student對象傳遞給Array並使用setter輸入數據時,但是當我運行我的代碼時,輸​​出是說,像這樣的:在線程 「主要」 顯示java.lang.NullPointerException陣列中的吸氣和吸氣器

異常

我使用NetBeans,以寫我的Java代碼。

import javax.swing.JOptionPane; 
public class MainStudent { 

    public static void main(String[] args) { 
     String a,b; 
     int c; 
     Student[] std = new Student[3]; 
     for(int i=0; i<std.length; i++){ 
      a = JOptionPane.showInputDialog("Enter Student Name"); 
      b = JOptionPane.showInputDialog("Enter Student Address"); 
      c = Integer.parseInt(JOptionPane.showInputDialog("Enter Student Phone Number")); 
      std[i].setName(a); 
      std[i].setAddress(b); 
      std[i].setPhone_number(c); 
     } 

     for(int i=0; i<std.length; i++){ 
      System.out.println(std[i].getName()); 
     } 
    } 

} 

回答

3

你需要實例化你的數組與學生。

在你的循環頂部添加:

std[i] = new Student(); 

行:

Student[] std = new Student[3]; 

只有創建一個數據結構,能夠準確地拿着三名學生。數組中的索引實際上並不包含任何內容,並且實際上包含null,這就是爲什麼你要得到一個空指針。你說「結構std,讓我在索引我」,它立即給你一個空值,因爲你從來沒有把任何東西放入索引我。

1

初始化數組只是創建了一個具有給定大小的null的數組 - 您仍然需要單獨初始化每個元素。例如: -

Student[] std = new Student[3]; 
for(int i=0; i<std.length; i++){ 
    a = JOptionPane.showInputDialog("Enter Student Name"); 
    b = JOptionPane.showInputDialog("Enter Student Address"); 
    c = Integer.parseInt(JOptionPane.showInputDialog("Enter Student Phone Number")); 
    std[i] = new Student(); // Create the object first 
    std[i].setName(a); 
    std[i].setAddress(b); 
    std[i].setPhone_number(c); 
} 
0

我建議你使用列表,而不是數組:

List<Student> std = new ArrayList<Student>(); 
for(int i=0; i<std.length; i++){ 
    Student _tmpStudent = new Student(); 
    a = JOptionPane.showInputDialog("Enter Student Name"); 
    b = JOptionPane.showInputDialog("Enter Student Address"); 
    c = Integer.parseInt(JOptionPane.showInputDialog("Enter Student Phone Number")); 
    _tmpStudent.setName(a); 
    _tmpStudent.setAddress(b); 
    _tmpStudent.setPhone_number(c); 
    std.add(_tmpStudent); 
} 

在你的情況,你得到錯誤,因爲性病[I]對象不存在,把std[i] = new Student()爲後。

0

假設代碼對於所有學生類都是正確的,您只需爲包含對話框的for循環的每個迭代初始化一個學生對象。

插入

std[i] = new Student(); 

爲第一生產線在你的循環可能會解決您的問題,因爲它會創建一個學生對象,其值可以設置。在沒有初始化Student對象的情況下,setX()會嘗試設置std的默認值:一個空對象。

重訪您的構造函數並確定它的放置位置。只要確保在傳遞方法之前構造對象。