0

当我在文本框中输入时,我希望它添加数字,而不是如果我输入(例如)12,然后再次单击存款,它只显示 12。我认为这是因为它似乎认为那是它的 0 加 12每次。某些东西似乎没有正确实例化。我认为。谁能指出我做错了什么?

namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    private void btn_deposit_Click(object sender, EventArgs e)
    {
        double input;
        input = double.Parse((putin.Text));
        BankAccount a = new BankAccount(input);
        aMtBox.Text = a.AccountBalance.ToString();
    }
}

public class BankAccount
{
    private double num1;
    private double accountBalance;

    public BankAccount(double input)
    {
        num1 = input;
        Deposit();
    }

    public double Num1
    {
        set {num1 = value;}
        get {return num1;}}

    public double AccountBalance
    {
        get {return accountBalance;}
        set {accountBalance = value;}}

    public void Deposit()
    {
        accountBalance = accountBalance + num1;
    }
}
}
4

2 回答 2

5

BankAccount每次单击按钮时,您都会创建一个新实例- 因此accountBalance将是 0.0 (类型字段的默认值double)。你期望它如何“知道”之前的余额?

您完全有可能在表单中有一个类型的实例变量。BankAccount您还应该考虑num1实例变量的BankAccount含义。这个名字当然不能告诉我们任何事情。感觉它实际上应该只是该Deposit方法的一个参数。

此外,对于货币值,您永远不应使用double- 使用decimal或整数类型来表示美分(或便士或其他)的数量。您不想陷入正常的二进制浮点问题。

此时,您的方法将变为:

// I hate the VS-generated event names, but...
private void btn_deposit_Click(object sender, EventArgs e)
{
    // TODO: Use decimal.TryParse, and handle invalid input cleanly.
    decimal newDeposit = decimal.Parse(putin.Text);
    account.Deposit(newDeposit);
    aMtBox.Text = account.AccountBalance.ToString();
}
于 2013-10-05T19:09:23.127 回答
0

您需要有一个使用表单初始化的表单的 BankAccount 字段。应该看起来像这样:

public partial class Form1 : Form
{
    private BankAccount account;
    public Form1()
    {
        InitializeComponent();
        account = new BankAccount(0);
    }

    private void btn_Deposit_Click(object sender, EventArgs e)
    {
        account.Num1 = double.Parse((putin.Text));
        account.Deposit();
        aMtBox.Text = account.AccountBalance.ToString();
    }

}

附带说明,应验证 Input,并将 BankAccount 类重构为:

class BankAccount
{
    private double num1;
    private double accountBalance;

    public BankAccount(double startingBalance)
    {
        accountBalance = startingBalance;
    }

    public double AccountBalance
    {
        get {return accountBalance;}
        set {accountBalance = value;}
    }

    public void Deposit(double depositAmount)
    {
        accountBalance += depositAmount;
    }
}
于 2013-10-06T00:37:23.793 回答