2013-10-05 106 views
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; 
    } 
} 
} 

回答

5

你创建的每一个按钮被点击时BankAccount一个新的实例 - 所以accountBalance将是0.0(类型double的字段的默认值)。你是如何期望它“知道”以前的平衡?

完全可能的是,您的表单中应该有一个实例类型为BankAccount的变量。您还应该考虑BankAccount中的num1实例变量的含义。这个名字当然不会告诉我们任何事情。感觉它实际上应该只是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(); 
} 
+0

我想我的是NUM1曾经的念头应该作为用户输入的输入。我对编程非常陌生。很多概念都超出了我的视野,而且由于我只编程了4个月,我一直在努力让事情保持基本,并且进展缓慢。 – Zoro

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(); 
    } 

} 

在一个侧面说明,输入要进行验证,并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; 
    } 
} 
相关问题