2012-12-20 98 views
-4

運行下面的代碼的結果是:賬戶餘額計算不正確

Final account balance is: -97.0 

但答案應該是150.0,對不對?我哪裏錯了?

class Account 
{ 
    double initBalance; 

    Account(double initBalance) 
    { 
    initBalance=this.initBalance; 
    } 

    double getBalance() 
    { 
    return initBalance; 
    } 

    void deposit(double amt) 
    { 
    initBalance=initBalance + amt; 
    } 

    void withdraw(double amt) 
    { 
    initBalance=initBalance - amt; 
    } 

} 


class TestAccount 
{ 
    public static void main(String args[]) 
    { 
    Account acct=new Account(100); 
    acct.deposit(50); 
    System.out.println("Final account balance is: " +acct.getBalance()); 
    } 
} 
+7

**這個程序中有什麼錯誤**代碼格式? :P – PermGenError

+3

發佈問題時,使用正確的代碼格式是最不可能的。既然你想要我們的東西(幫助),你應該儘可能地讓我們幫助你。我們不應該通過大量的角色來理解你的代碼。 –

+0

究竟是什麼錯誤,因爲ans應該是150.0我得到它-97.0 y? –

回答

8
Account(double initBalance) { 
    initBalance=this.initBalance; 
} 

必須

Account(double initBalance) { 
    this.initBalance=initBalance; 
} 
3

這是不對的:

Account(double initBalance) 
{ 
initBalance=this.initBalance; 
} 

這應該是:

this.initBalance = initBalance; 
2

的問題是在你的構造,試試這個

Account(double initBalance) 
{ 
    this.initBalance = initBalance; 
} 

這正是方法的參數應該比實例變量不同的名稱,還可以使用最後的應青睞避免這種錯誤的原因。如果你的構造函數參數是final的,編譯器本身會提醒你的。良好做法

Account(final double pInitBalance) 
{ 
    initBalance = pInitBalance; 
} 
+0

我不同意你的最後一點。名稱清晰可以更容易閱讀。畢竟,你不會是唯一使用的,審查代碼 –

+0

@AdelBoutros我從來沒有說過這個名字不應該清楚;我只是說,一個命名約定,可以幫助您識別方法或構造參數有所幫助,看看我的良好實踐建議 – Scorpion

+0

我仍然認爲使用此指針保持相同的名稱更好。我不是說你不能這樣做,但如果我讀了它,我會想知道爲什麼它在開始時會有一個「p」。畢竟這是主觀的看法:) –

1

更改構造函數的代碼。該變種是正確的:

Account(double initBalance) { 
     this.initBalance = initBalance; 
} 
0
class Account 
{ 
    public double initBalance; 

    public Account(double initBalance) 
    { 
     this.initBalance =  initBalance; 
    } 

    double getBalance() 
    { 
     return initBalance; 
    } 

    void deposit(double amt) 
    { 
     initBalance=initBalance + amt; 
    } 

    void withdraw(double amt) 
    { 
     initBalance=initBalance - amt; 
    } 
} 


public class TestAccount 
{ 
    public static void main(String args[]) 
    { 
     Account acct=new Account(100); 
     //System.out.println("account balance after deposit 100 is: " +acct.getBalance()); 
     acct.deposit(50); 
     //System.out.println("account balance after deposit 100 + 50 is: " +acct.getBalance()); 
     System.out.println("Final account balance is: " +acct.getBalance()); 
    } 
} 

這是正確的代碼。覈實。