2017-10-19 71 views
1

所以我試圖創建一個簡單的程序,該對象具有Integer數組作爲成員,並且使用toString()方法打印出數組中的所有元素。代碼是這樣的:構造函數在使用Integer數組時不起作用

public final class IntegerArray { 

     private int a[]; 

     IntegerArray(int a[]) 
     { 
      for(int i=0; i<a.length; i++) this.a[i]=a[i]; 
     } 

     public String toString() 
     { 
      String fin=new String(); 
      fin+='['; 
      for(int i=0; i<a.length-1; i++) 
      { 
       fin+=a[i]+", "; 
      } 
      fin+=a[a.length-1]; 
      fin+=']'; 
      return fin; 
     } 
} 

public class IntegerArrayTester { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Scanner scan=new Scanner(System.in); 
     Random random=new Random(); 

     int[] a={1, 5, 3, 7}; 
     IntegerArray A=new IntegerArray(a); 
     System.out.println(A.toString()); 

    } 

} 

但是,當我運行該程序時,它給了我2個錯誤。一個在構造函數和另一個當我初始化從類對象:

Exception in thread "main" java.lang.NullPointerException 

    at main.IntegerArray.<init>(IntegerArray.java:9) 

    at main.IntegerArrayTester.main(IntegerArrayTester.java:14) 

有人可以告訴有什麼問題,我該如何解決?

預先感謝您!

+0

'this.a [i]'是問題所在,你不需要先初始化數組... – AxelH

+0

不需要循環,你只需要分配給它。 'this.a = a;'easy –

回答

0

你應該IntegerArray構造這樣初始化數組:

IntegerArray(int a[]) 
{ 
    this.a = new int[a.length]; 
    for(int i=0; i<a.length; i++) this.a[i]=a[i]; 
} 

此外,您還可以指定this.a = a,但如果你這樣做,任何操作在this.a陣列您類,如刪除,添加或編輯元素,數組a也將改變,因爲操作this.a = a你只是做了一個「鏈接」到a和原始a數組。

+0

非常感謝。這似乎解決了這個問題。 –

0

您陣列是不是initialitazed,所以它給一個NullPointerException,你應該在構造函數中添加此:

 this.a=new int[a.length]; 

因此結束爲:

IntegerArray(int a[]) { 
       this.a=new int[a.length]; 
       for (int i = 0; i < a.length; i++) 
        this.a[i] = a[i]; 
      } 
0

你從來沒有在IntegerArray初始化a[]

public final class IntegerArray { 

    private int a[]; // here it's null 
    ... 
} 

您應該初始化類別變量竹葉提取創建有關您收到的參數之一大小的新數組:

public final class IntegerArray { 

    private int a[]; // here it's null 

    IntegerArray(int a[]){ 
     this.a = new int[a.length]; 
     ... 
    } 
} 

順便說一句,你不必循環陣列上。你可以只克隆它:

public final class IntegerArray { 

    private int a[]; 

    IntegerArray(int a[]){ 
     this.a = a.clone(); 
    } 
} 
0

問題是什麼

你不初始化一個,所以它等於null

爲什麼這是一個問題

你不能調用空方法,因爲這會導致NullPointerException異常

如何修復

您需要在使用前初始化數組,例如:

this.a=new int[a.length]; 
相關問題