2017-06-12 87 views
0

我是Java的初學者,這看起來很簡單,但我無法弄清楚我在下面做錯了什麼。爲什麼「int a,b;」而「int c = a-b」在我給「a」和「b」賦值時不工作?

我創建了一個有3個整數a,b和c的類。

public class Temp { 
    private int a; 
    private int b; 
    private int c = a - b; 

    public Temp(int a, int b) { 
     this.a = a; 
     this.b = b; 
    } 

    public int getA() { 
     return a; 
    } 

    public int getB() { 
     return b; 
    } 

    public int getC() { 
     return c; 
    } 

然後在主類中,我創建了一個對象並給出了a和b的值。但爲什麼不計算c(如下所示,在打印結果時,結果爲0)?

主營:

public class Main122 { 
    public static void main(String[] args) { 
     Temp z = new Temp(8, 7); 
     System.out.println(z.getA()); 
     System.out.println(z.getB()); 
     System.out.println(z.getC()); 
    } 
} 

結果:

8 
7 
0 

請幫我,謝謝!

+2

字段初始值設定項在構造函數的主體之前執行,所以在計算'a-b'時,'a'和'b'仍然是默認值'0'。 – Andreas

+0

非常感謝! – justinj

回答

2

因爲INT具有默認值0,當你宣稱C,A和B具有0.1

值。如果你想改變的c您應該賦值給它的值,如:

public Temp(int a, int b) { 
     this.a = a; 
     this.b = b; 
     this.c = this.a - this.b; 
    } 
+0

感謝您的幫助! =) – justinj

1

您正試圖在聲明處設置c值。例如,成員不應該這樣做。相反,

public class Temp { 
    private int a; 
    private int b; 
    private int c; 

    public Temp(int a, int b) { 
     this.a = a; 
     this.b = b; 
     this.c = this.a - this.b; 
    } 
    ... 
} 

如果你離開一切不變,你應該得到

8 
7 
1 

以您目前的代碼,你會得到0,因爲在那個時候,你指定c = a - b,既ab已經初始化恢復爲默認值(因此它們的默認值爲0,int s和0 - 0 = 0)。

+0

感謝您的幫助! – justinj

+0

@justinj很高興幫助。考慮標記幫助你並解決問題的答案。乾杯。 –

相關問題