2017-07-14 101 views
2

有人能解釋爲什麼它不起作用嗎?錯誤在obj[0][0]=1;。它表示GPA不能轉換爲int,對於String變量賦值s也是如此。創建具有多種數據類型的Java數組時出錯

public class GPA {   
     public String s; 
     public int n; 
     public GPA[][] a; 

     //constructor 
     public GPA(GPA[][] a){}  

     public static void main(String[] args) { 
      GPA[][] obj=new GPA[2][2]; 
      obj[0][0]=1; //error here 
     } 
} 
+1

是錯誤是正確的。你不能這樣轉換。 –

+1

在java中,數組中不能有多種數據類型。如果將數組聲明爲GPA對象數組,則它只能包含GPA對象。如果將數組聲明爲int數組,則它只能包含int的數組。 –

+0

@SureshAtta我該怎麼做呢? – Maya

回答

1

它不會工作,給你編譯時錯誤,因爲GPA是類類型和您要指定int值給它。

您有兩種選擇。

選項1:

GPA[] obj = new GPA[4]; 
obj[0] = new GPA(); 
obj[0].n = 1; 

選項2:

可以使GPA的成員私人和使用setter方法來設置值。下面是例子。

public class GPA { 

    private String s; 
    private int n; 
    private GPA[] a; 

    public GPA() {} 

    public GPA(GPA[] a) {} 

    public String getS() { 
     return s; 
    } 

    public void setS(String s) { 
     this.s = s; 
    } 

    public int getN() { 
     return n; 
    } 

    public void setN(int n) { 
     this.n = n; 
    } 

    public GPA[] getA() { 
     return a; 
    } 

    public void setA(GPA[] a) { 
     this.a = a; 
    } 

} 

然後使用setter進行設置。

obj[0].setN(1); 

讓你的成員公開是不好的編程習慣。總是建議使用setters。

+0

在這兩種情況下,你的第一行不會給出NullPointerException嗎? –

+0

@ErwinBolwidt哦!!!是的,它會給。我已經更新了答案。 –

4

obj是GPA對象的數組。 obj[0] = 1表示您將該數組的第一個元素賦值爲int值。它應該是GPA類型的object。 你可以不喜歡它

obj[0] = new GPA("John Doe", 6); 

我也建議使用Java約定,由公共的方法,如setter()小號做variables私人和set()他們。

問題發生了變化,使答案無關緊要。

+0

正如我將lombok @Data重新繪製,但它是一種相關的,因爲即使是僞構造器也沒有意義 – PanBrambor

1

你現在在做的是試圖將int和/或字符串賦值給期望GPA類的對象的變量。 你不想做

obj[0].n=1; 
obj[0].s="text;" 
+0

第一行不會給出'NullPointerException'嗎? –

+0

那麼,如果你把它與源代碼相關聯,那麼npe就是最少的問題,我的意思是更正確地將值分配給他們指定的變量。 – PanBrambor

1

對於數組對象,您必須首先在該位置的對象上創建。否則你總是得到一個NullPointerException。 所以,你需要的東西是這樣的

GPA[][] obj = new GPA[2][2]; 
obj[0][0] = new GPA(); 
obj[0][0].s="text"; 
obj[0][0].n=1; 
... 

等爲每個位置有。

0

Java數組是同類的(Javascript數組是異構的)。這意味着您只能存儲創建陣列時使用的元素類型。

ex: `int intArray[];` //We can store only int type elements(it also accepts Integer etc.. types but java converts to int then store it) 

現在,將相同的規則應用到public GPA[] a;這裏a是一個GPA類型的數組。所以它只接受GPA類型的對象。

即意味着,可以存儲值等作爲下面

一個[0] =新GPA( 「nameHere」,6);

如果我要存儲一個字符串或一個int,一次一個(我有 使學生姓名VS GPA的表),我該怎麼辦呢?

該要求的一個解決方案是,使用構造函數或setter方法分配變量。

GPA[] obj = new GPA[2]; 

obj[0] = new GPA("first", 6); // here you need to create a new constructor 
or 
obj[1] = new GPA(); // Here default constructor will work and you need to have setter methods 

obj[1].setName("second"); 

希望這有助於...

相關問題