2012-12-20 99 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()); 
    } 
} 

这是正确的代码。核实。